Получение объекта по номеру — различия между версиями
Antonkov (обсуждение | вклад) (→Перестановки) |
Antonkov (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. | Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. | ||
'''<tex>f[n]=n!</tex>''' | '''<tex>f[n]=n!</tex>''' | ||
+ | '''<tex>ans[n]</tex> ''//искомая перестановка''' | ||
+ | '''<tex>was[n]</tex> ''//использовали ли мы уже эту цифру в переставновке''' | ||
'''for''' <tex> i \leftarrow 1 </tex> '''to''' <tex> n </tex> '''do ''// n-это количество цифр в перестановке''''' | '''for''' <tex> i \leftarrow 1 </tex> '''to''' <tex> n </tex> '''do ''// n-это количество цифр в перестановке''''' | ||
'''AlreadyWas <tex> i \leftarrow </tex> (NumOfPermutation-1) div f[n-i] ''// сколько цифр уже полностью заняты предыдущими перестановками''''' | '''AlreadyWas <tex> i \leftarrow </tex> (NumOfPermutation-1) div f[n-i] ''// сколько цифр уже полностью заняты предыдущими перестановками''''' | ||
− | '''// | + | '''''//сейчас мы должны поставить ту цифру которая еще полностью не занята, т.е. AlreadyWas+1''''' |
+ | '''for''' <tex> j \leftarrow 1 </tex> '''to''' <tex> n </tex> '''do''' | ||
+ | '''if''' <tex> was[j] = FALSE </tex> | ||
+ | '''then ''' <tex> CntFree++ </tex> | ||
+ | '''if''' <tex> CntFree = AlreadyWas+1 </tex> | ||
+ | '''then ''' <tex> ans[i] \leftarrow j </tex> | ||
+ | <tex> was[j] \leftarrow TRUE </tex> | ||
+ | |||
+ | |||
== Сочетания == | == Сочетания == |
Версия 01:19, 26 октября 2011
Перестановки
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки.
//искомая перестановка //использовали ли мы уже эту цифру в переставновке for to do // n-это количество цифр в перестановке AlreadyWas (NumOfPermutation-1) div f[n-i] // сколько цифр уже полностью заняты предыдущими перестановками //сейчас мы должны поставить ту цифру которая еще полностью не занята, т.е. AlreadyWas+1 for to do if then if then