Перебор чисел
- From
- Eugene Anuchin (2:5070/96.2)
- To
- Dmitriy Gerasimenko
- Date
- 2002-07-24T00:12:05Z
- Area
- RU.ALGORITHMS
Hi, Dmitriy !
23 Июл 02 11:22, Dmitriy Gerasimenko wrote to Eugene Anuchin:
>> DG> Мой алгоритм похож на электросчётчик, или на спидометр в
>> DG> автомобиле если угодно. Соответсвенно, по моёй формуле количество
>> DG> перестановок твоего числа "0123456789" = 10^10
>> EA > А какой тогда здесь вообще алгоритм?!
>> EA > Просто пробегаем все значения от 0 до 10^10-1
DG> А кто вообще говорил что это должны быть обязательно числа ???........
DG> Никто вроде не говорил! Всё немного сложнее и интереснее чем кажется.
Это уж точно. "Моим числом" ты сам назвал то, что я везде определял как строку произвольных символов.
DG> А для символов: "KADY", "WOUCJKB", "QWERTY" организовать цикл т.е.
DG> "пробежать" тоже не получится!
Почему? Представь себе четверичную систему (и)счисления, где ноль обозначается символом "K", единица="A", двойка ="D", тройка ="Y".
Затем "ПРОБЕГИСЬ" от 0 до 4^4-1 и будет тебе (KKKK-YYYY). Остальные примеры аналогично.
DG> Ну а коли так! То цикл тут не поможет,
DG> и применять следует ПЕРЕСТАНОВКУ! Ну а если применить следует
DG> ПЕРЕСТАНОВКУ, то это ни что иное как алгоритм перестановки.
Золотые слова.
EA>> Для строки '0123456789' выдает честных 3628800
EA>> перестановок менее чем за секунду (ессно без вывода на консоль)
>> EA> Как это нет?!!! Печать идет на стандартное устройство вывода (по
DG> Тебя не понять, сначала ты пишешь что вывода на консоль нет, потом
DG> ,что есть!? Определись!
Определяюсь: Для генерации 3628800 перестановок за <1сек. нужно отключить вывод на консоль. Вроде понятно объяснил.
DG> Далее... хорошо, вот то, что ты имеешь в виду, но не имею в виду я:
DG> это БЕЗ рекурсии, но есть и С рекурсией....
[Прога пропущена]
DG> Результат вывода для числа: [1234]
DG> 1 : 2134
[...]
DG> 12 : 1234
DG> На сим заканчиваю... алгоритмы разные нужны, алгоритмы разные важны.
Вот когда для четырех элементов у тебя получится 4!=1х2х3х4=24 перестановки,
тогда можно и заканчивать.
Вот скомпиленый пример. В коммандной строке набрать: recur abcd
или: recur privet>result.txt
а также: recur 0123456789
===============================================================
section 1 of uuencode 5.10 of file recur.com by R.E.M.
begin 644 recur.com
MNH(`B=,"7_['!PHD2RG3=BBT"<TAB/6(W_[+@/L!=@53Z//_6XC9B=>)UD:*
-!?.DJO[/=`3-(>OBP^OB
`
end
sum -r/size 54673/110 section (from "begin" to "end")
sum -r/size 47730/58 entire input file
===============================================================
... Life - Sucks!
--- Не подохнешь - пpивыкнешь, не пpивыкнешь - подохнешь! (М. Жванецкий)
* Origin: `Wireless' Евгений ael @irk. ru (2:5070/96.2)