![]() |
|
Модераторы: Се ля ви, Nastya, neutrino |
![]()
|
|
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 1 Всего: 93 |
Lamer George
Ну, как уже сказано, зависящие от пользователя циклы проверять нафик не надо
А вот это уже лучше. Есть даже подозрение, что для целочисленных циклов это вполне реально. У меня у самого какие-ты мыслишки по этому поводу в голове крутятся... но нормально оформится не могут
Кстати можно вычислять что-то вроде CRC или хэш-функции от текущего набора данных. Уменьшит расход памяти. Хотя и увеличит время. -------------------- Да. Именно так. |
||||
|
|||||
| neutrino |
|
||||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 22 Всего: 62 |
По скольку все переменные ограничены опр. кол-вом битов, то цикл будет конечен в любом случае. Если будет ошибка Overflow Error - это значит цикл дошел до минимального отрицательного числа (зависит от кол-ва бит в переменной). Потом все пойдет по кругу и попадуться 2 одинаковых значения переменной b. В любом случае любое изменение значений переменных до цикла выполнится программой А. А каким образом именно изменится это значение неважно. Добавлено @ 21:57
Что за надсмешки!? Что за морды-смайлы!? Нет ну правда, разве имеет смысл определение время выполнения алгоритма с циклом в теле которого ввод данных пользователем? Добавлено @ 22:03
Можно сказать иначе: в алгоритмах вообще (если в них нет зависимости хода алгоритма от случайных генераций) количество итераций циклов однозначно зависят от входных данных. Нужно придумать как найти эту зависимость оптимальным способом. Неоптимальный способ мы уже нашли - запустить цикл и записать все значения переменных. -------------------- The truth comes from within ... Покойся с миром, Vit |
||||||
|
|||||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 22 Всего: 62 |
Все случайные генерации имеют конечный период, что позволяет найти конечность алгоритма по неоптимальному способу.
Еще одна проблемка: цикл в цикле. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| maxim1000 |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
ну за великого математика спасибо а 1000 и так в десятичной системе, не надо его из двоичной переводить только согласился я лишь в принципиальной возможности...
вот вам пример
что мы здесь видим: есть цикл, который просто пытается найти обратную функцию учитывая сложность функции никакая корреляция не подойдет, т.к. операции могут быть самые разные (вплоть до того, чтобы переставить биты, использовать представление double и кучу всего, что подскажет фантазия) кроме того, придется не просто пройти этот цикл, а пройти его для любого набора входных параметров (в этом примере их не было, но обычно, они есть у каждого алгоритма) уже на векторе из 10 double проверка будет работать невообразимо долго (даже при небольшом алгоритме)... основная проблема в том, что программа пишется сегодня, а проверять она будет алгоритмы, которые напишут завтра, т.е. абсолютно непредсказуемые (если, конечно, не стоит цель проверять типовые алгоритмы, но это неинтересно) Это сообщение отредактировал(а) maxim1000 - 12.4.2005, 22:17 -------------------- qqq |
||||||||
|
|||||||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 1 Всего: 93 |
maxim1000
Нда... Если бы функция была непрерывной... И найти бы две точки, где она разного знака... Мечты... А вот с таким чёрным ящиком хрен чего скажешь. ЗЫ: При внимательном рассмотрении твоего примера видна, что цикл конечен из-за условия c<0xffffff -------------------- Да. Именно так. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
ладно-ладно, поймал заменим break на while(true) и будем считать, что мы не знаем, возвращает ли когда-нибудь функция 0 -------------------- qqq |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 4 Всего: 454 |
Например расчет какого-нить хэша файла по весьма сомнительному алгоритму. Имя файла зашито в программу... но сам файл может быть любым, как по размеру, так и по контенту... в т.ч. может существовать единственный возможный контент, вызывающий зацикливание алгоритма (например файл нулевой длины) - и как его искать? И не надо кивать, что файл нулевой длины лишь частный случай, алгоритм проверки не имеет права рассматривать его как специальный - или это уже 2 разных алгоритма.
а если float? double? hyperlong? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 22 Всего: 62 |
Максим, можно даже проще:
0) п = 2 1) пока тру 2) п = искать следующее простое число 3) конец пока Добавлено @ 23:29 Как говорится: "сосем ноги!" -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 2 Всего: 18 |
Я не готов сейчас рассуждать о теории, но вот хотел сказать, что схожие задачи - вполне реальные - существуют в реальном мире и вот каких успехов в их решении удалось добиться:
Задача о поиске вирусов. Требуется определить, является ли программа зараженной вирусом. Задача о нахождении уязвимостей в программе - таких, как переполнение буфера и т.п. Антивирусы комбинируют метод эмуляционной отладки (те запуск тестируемого кода на виртуальной машине), метод сканера (те есть база сигнатур известных вирусных кодов или характерных команд), метод мониторинга (перехват обращений к критичным данным) и - самый продвинутый - эвристический анализ. Помню, как я рассказывал одному челу из др веба про то, как я, написав свой первый вир, был крайне удивлен тем, что веб тут же - весьма точно - определил не только наличие вируса, но и точно вывел его тип. Однако подумав немного я зациклил критичный код на значительное число итераций (тем не менее он оставался рабочим) и ... вирус перестал определятся ! Где-то давно читал, что невозможно написать антивирус (при условии стабильности среды - те та же ось, те же апи и проч.) - всегда будет способ обойти любой алгоритм, и вроде это четко можно доказать. По крайней мере в руках вирусмейкера есть мощное оружие - полиморфизм (проверяемый код может полностью или частично видоизменяться, не теряя своей работоспособности), что может снести многие методы анализа - например, если программа будет полностью преобразовывать проверяемый цикл, случайным образом переносить переменные в памяти и т.п. То, что до сих пор идет война на вирусном фронте, говорит скорее за то, что задача нерешаема. Насчет поиска уязвимостей, кажется, тоже делались попытки написать сканеры таких уязвимостей - например, выявление локальных буферов фиксированного размера в сочетании с их заполенением данными из вне, но особого успеха, вроде бы, им добиться не удалось. Это сообщение отредактировал(а) Chingachguk - 24.4.2005, 23:24 -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
![]()
|
| Правила форума "Наука и Мир" | |
|
|
При составлении постов старайтесь соблюдать орфографию и грамматику русского языка.
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Наука и Мир | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |