Получение объекта по номеру — различия между версиями
Antonkov (обсуждение | вклад) |
Antonkov (обсуждение | вклад) (→Перестановки) |
||
Строка 1: | Строка 1: | ||
== Перестановки == | == Перестановки == | ||
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. | Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. | ||
− | + | <source lang="c"> | |
− | + | f[n]=n! | |
− | + | ans[n] ''//искомая перестановка''''' | |
+ | was[n] ''//использовали ли мы уже эту цифру в переставновке''''' | ||
'''for''' i = 1 '''to''' n '''do ''//n-это количество цифр в перестановке''''' | '''for''' i = 1 '''to''' n '''do ''//n-это количество цифр в перестановке''''' | ||
− | + | alreadyWas = (numOfPermutation-1) div f[n-i] ''' | |
− | + | numOfPermutation = (numOfPermutation-1) mod f[n-i] ''// сколько цифр уже полностью заняты предыдущими перестановками''''' | |
− | + | ''//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. AlreadyWas+1''''' | |
'''for''' j = 1 '''to''' n '''do''' | '''for''' j = 1 '''to''' n '''do''' | ||
'''if''' was[j] = false | '''if''' was[j] = false | ||
Строка 13: | Строка 14: | ||
'''if''' cntFree = AlreadyWas+1 | '''if''' cntFree = AlreadyWas+1 | ||
'''then ''' ans[i] = j | '''then ''' ans[i] = j | ||
− | was[j] =w true | + | was[j] =w true |
− | + | </source> | |
− | |||
== Сочетания == | == Сочетания == |
Версия 01:57, 26 октября 2011
Перестановки
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. <source lang="c">
f[n]=n! ans[n] //искомая перестановка was[n] //использовали ли мы уже эту цифру в переставновке for i = 1 to n do //n-это количество цифр в перестановке alreadyWas = (numOfPermutation-1) div f[n-i] numOfPermutation = (numOfPermutation-1) mod f[n-i] // сколько цифр уже полностью заняты предыдущими перестановками //сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. AlreadyWas+1 for j = 1 to n do if was[j] = false then cntFree++ if cntFree = AlreadyWas+1 then ans[i] = j was[j] =w true
</source>
Сочетания
for
dofor to do for if then return