| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > БрутФорс |
| Автор: lifer 19.1.2004, 21:47 |
| Кто подскажет как логичней всего организовать перебор всех комбинаций букв в заданном диапазоне (3-8 символов в слове) на ПХП? (не бойтесь, ломать ничего не собираюсь). |
| Автор: arial 19.1.2004, 22:35 | ||
Для цифр придумал за 5 секунд:
|
| Автор: lifer 19.1.2004, 22:58 |
| хм, для цифр я и сам за 5 сек напишу, а вот для букв не могу ничего придумать пока-что... Может создать массив где значениями будут символы, а потом работать с ним? |
| Автор: arial 19.1.2004, 23:24 |
| Ну это понятно, а потом рекурсией этот массив. |
| Автор: lifer 20.1.2004, 02:28 | ||
| Млин, что-то башка совсем не варит сегодня. Пробовал сделать через вложенные циклы for, но это долго и глупо. А с рекурсией никак разобраться не могу. Может хоть набросок какой-нибудь кинете? Пожалуйста.
Вот мой массив. |
| Автор: lifer 20.1.2004, 02:30 |
| У меня проблема как от одного символа в слове перейти к 2-м и.т.д. (понимаю, что торможу... но сейчас ничего больше придумать не могу) |
| Автор: Sardar 20.1.2004, 03:17 | ||
У меня на часах 1:20 так что за "качество" кода не ручаюсь
Идея ясна, оптимизация за тобой. |
| Автор: Fedor 20.1.2004, 03:23 | ||
Вот тебе АЛГОРИТМ полного перебора чео угодно. Попробуй сам перевести его...
Здесь: S[k] - список допустимых значений на k-том шаге A[k] - последовательность букв в ответе З.Ы. Этот алгоримт - очень общий. ПЛЮС Я - паскалист, так что код близок к паскалевскому. Если надо, могу написать решение на Паскале, а ты его переведешь куда надо... |
| Автор: Fedor 20.1.2004, 03:24 |
| Sardar Сори... когда писал, твоего ответа не было... |
| Автор: MuToGeN 20.1.2004, 10:55 |
| Где-то в ветке по PHP валяется мой алгоритм перебора всех значений из массива. |
| Автор: lifer 20.1.2004, 15:35 | ||||||||
| 2 sardar Ругается насчёт ф-ции putWord($word); Говорит что нету такой Я немного изменил скрипт:
Вот что получается в рез-те:
т.е. скрипт перебирает далеко не все варианты сочетания символов.
Помоему, быстрее не будет. 2 Morpheus
Лучше на Паскале напиши |
| Автор: Sardar 20.1.2004, 23:00 | ||||||
Ты серьезно
Я же сказал поздно было, туплю
|
| Автор: lifer 20.1.2004, 23:58 | ||||
Sardar
Млин, предупреждать надо А то я уже начал думать что у меня крыша едет...
Сенкс. Всё заработало. Теперь осталось только разобраться как именно всё это работает У меня что-то последние два дня голова совсем не варит. Ничего понять не могу. Пить меньше надо... И ещё, просто для интереса: эту же задачу возможно решить с помощью рекурсии? |
| Автор: Sardar 21.1.2004, 00:09 |
| Самый простой способ - представь себе диски как в кодовом замке. На диски нанесенны все символы из алфавита, количество дисков равно количеству символов в пароле. Каждый раз ты крутишь последний диск на одно деление, как только диск сделал полный оборот ты крутишь на одно деление следующй диск. Как только первый(самй последний) диск сделал полный оборт обьявляем что все комбинации перебранны. Здесь рекурсия не нужна(даже не знаю как ее прикрутить |
| Автор: lifer 21.1.2004, 00:41 |
| Понятно. Спасибо за объяснение. |