Помогите пожалуйста сгенерировать перестановки с повторениями.
"Слово" из 7 знаков. Знак - буквы латинского алфавита A-Z и числа 0-9
Понимаю, что вариантов будет ооочень много, но хотя бы примерный алгоритм скрипта хотелось бы узнать.
Заранее благодарю!
megaloman
14-02-2017, 18:59
nastasa, Поясните: есть слово из 7 знаков. Эти знаки неизменные? Надо именно из этих 7 знаков путём перестановок получить все возможные сочетания?
nastasa, Поясните: есть слово из 7 знаков. Эти знаки неизменные? Надо именно из этих 7 знаков путём перестановок получить все возможные сочетания? »
Не знаю как объяснить, 7 позиций
То есть получить все перестановки с повторениями типа
ABCDIFG
ABCDIFU
ABCDIF1
ABCDIF2
и т. д.
Очень надо :(
Почему именно на пакетных файлах? Это не лучший выбор.
Почему именно на пакетных файлах? Это не лучший выбор. »
А что посоветуете использовать?
Вам для каких целей? Один конечный файл с построчными результатами комбинаций займёт чуть больше 352 с половиной Gb.
конечный файл с построчными результатами комбинаций займёт чуть больше 352 с половиной Gb »
Iska, меня мучает только один вопрос: создал или посчитал?
nastasa,
если вы решили что избретете генератор подбора пароля, то уверяю вас что вы опоздали и это сделано в более удобной правильной и качественной форме, вот только возможно не всем доступно и не всем понятно и НЕ всем нужно.
Iska, меня мучает только один вопрос: создал или посчитал? »
Посчитал, конечно: = N!/(N-M)!, затем перемножил полученный результат (число строк) на (7 символов + 2 символа CrLf на строку).
А вот, кстати, я могу быть и не прав, ибо что-то проглядел про:
с повторениями. »
с повторениями »
и формула будет проще, а результат — ещё толще :).
megaloman
21-02-2017, 20:08
nastasa, Я не силён в комбинаторике, поэтому оценить объём выходного файла не берусь.
Я поставил задачу в общем виде:
Необходимо сформировать все возможные слова длиной M символов.
Набор возможных символов задаётся. Число возможных символов >=M
В сформированном слове не должно быть одинаковых символов.
'Sym = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
Sym = Array("A", "B", "C", "D", "E", "F", "G") ' Набор символов для составления слов
M = 7 ' Длина слова
File_Out = "Z:\Box_Out\kuku.txt" ' Файл со списком слов (результат работы)
NM = M - 1
ReDim iSym(NM)
NS = UBound(Sym)
For k = 0 To NM
iSym(k) = k
Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set NFile = FSO.OpenTextFile(File_Out, 2, True)
Do While iSym(0) <= NS
Equ = False
For k = 0 To NM
For kk = k + 1 To NM
Equ = (iSym(k) = iSym(kk))
If Equ Then Exit For
Next
If Equ Then Exit For
Next
If Not Equ Then
SS = ""
For k = 0 To NM
SS = SS + Sym(iSym(k))
Next
' MsgBox SS
NFile.WriteLine SS
End If
For k = NM To 0 Step -1
iSym(k) = iSym(k) + 1
If iSym(k) <= NS Then Exit For
If k <> 0 Then iSym(k) = 0
Next
Loop
NFile.Close
MsgBox "Скрипт отработал"
Определите путь к выходному файлу.
В приведенном примере длина слова M=7
Взят набор из 7 символов "A", "B", "C", "D", "E", "F", "G"
В выходном файле получилось 5040 значений.
Для набора из 8 символов "A", "B", "C", "D", "E", "F", "G", "H" и длине слова M=7
в выходном файле получилось 40320 значений. И время выполнения выросло резко.
Не знаю, но, по видимому, можно применить более эффективный алгоритм.
Вы можете всё это поменять, лишь бы число возможных символов было не менее длины слова - никаких защит от этого я не предусматривал.
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.