Перебор чисел
- From
- Eugene Anuchin (2:5070/96.2)
- To
- Dmitriy Gerasimenko
- Date
- 2002-07-23T03:03:31Z
- Area
- RU.ALGORITHMS
Hi, Dmitriy !
22 Июл 02 09:08, Dmitriy Gerasimenko wrote to Eugene Anuchin:
EA>> Компилировалось fasm'ом.
EA>> http://fasm.metro-nt.pl/fasm.zip (~200kb). Imho, получился
EA>> довольно изящный и короткий (53 байта) алгориитм...
EA>> Для строки '0123456789' выдает честных 3628800
EA>> перестановок менее чем за секунду (ессно без вывода на консоль)
DG> А почему 3628800 ?
Количество ПЕРЕСТАНОВОК для десяти элементов = 10! (факториал)
DG> Твой алгоритм перебора сгенерирует строку "0000000000","1111111111"?
Нет конечно. Только исходные элементы, переставленные всеми возможными вариантами.
DG> Я бы и сам проверил, но у тебя нет вывода на консоль или в файл.
Как это нет?!!! Печать идет на стандартное устройство вывода (по умолчанию - консоль). Можно перенаправить в файл (перестановки.com > отчет.txt)
DG> У меня подозрения, что твой алгоритм не разрешает размножаться
DG> символам в исходной строке, то есть он другой. Мой алгоритм похож на
DG> электросчётчик, или на спидометр в автомобиле если угодно.
DG> Соответсвенно, по моёй формуле количество перестановок твоего числа =
DG> 10^10
А какой тогда здесь вообще алгоритм?!
Просто пробегаем все значения от 0 до 10^10-1 (0000000000-9999999999)
DG> Приведу пример: исходная строка "1234", из N символов. N=4
DG> Найти: все возможные перестановки шириной S символов, S= 1, 2, 3, 4,
DG> 5, 6, 7. Количество перестановок= N^S
хорошо, вот то, что надо:
org 100h
push word last
mov ah, 9
mov dx, string
mov di, dx
;------------------------------
recur: mov si, buffer
next: lodsb
mov [di], al
cmp di, CR-1
jae skip
push si
push di
inc di
call recur
pop di
pop si
skip: cmp si, string
jae quit
int 21h
jmp next
quit: ret
;------------------------------
last: int 21h
ret
buffer db '012345' ;исходные элементы, N=6 штук. Можно заменить на 'privet'
string db 'xxx' ;итоговая строка S=3 символа. N^S = 6^3 вариантов
CR db ' $'
... Life - Sucks!
--- Не подохнешь - пpивыкнешь, не пpивыкнешь - подохнешь! (М. Жванецкий)
* Origin: `Wireless' Евгений ael @irk. ru (2:5070/96.2)