|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Eugene Anuchin 2:5070/96.2 23 Jul 2002 03:03:31 To : Dmitriy Gerasimenko Subject : Перебор чисел -------------------------------------------------------------------------------- 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 ? Количество ПЕРЕСТАHОВОК для десяти элементов = 10! (факториал) DG> Твой алгоритм перебора сгенерирует строку "0000000000","1111111111"? Hет конечно. Только исходные элементы, переставленные всеми возможными вариантами. DG> Я бы и сам проверил, но у тебя нет вывода на консоль или в файл. Как это нет?!!! Печать идет на стандартное устройство вывода (по умолчанию - консоль). Можно перенаправить в файл (перестановки.com > отчет.txt) DG> У меня подозрения, что твой алгоритм не разрешает размножаться DG> символам в исходной строке, то есть он другой. Мой алгоритм похож на DG> электросчётчик, или на спидометр в автомобиле если угодно. DG> Соответсвенно, по моёй формуле количество перестановок твоего числа = DG> 10^10 А какой тогда здесь вообще алгоритм?! Просто пробегаем все значения от 0 до 10^10-1 (0000000000-9999999999) DG> Приведу пример: исходная строка "1234", из N символов. N=4 DG> Hайти: все возможные перестановки шириной 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! --- Hе подохнешь - пpивыкнешь, не пpивыкнешь - подохнешь! (М. Жванецкий) * Origin: `Wireless' Евгений ael @irk. ru (2:5070/96.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/27953d3c4a0f.html, оценка из 5, голосов 10
|