Получение объекта по номеру — различия между версиями
Antonkov (обсуждение | вклад) |
Antonkov (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
== Перестановки == | == Перестановки == | ||
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки размера n. | Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки размера n. | ||
− | + | <tex>P_{n} </tex> ''- количество перестановок размера n | |
− | permutation[n] | + | permutation[n] ''- искомая перестановка'' |
− | was[n] | + | was[n] ''- использовали ли мы уже эту цифру в перестановке'' |
'''for''' i = 1 '''to''' n '''do''' ''//n - количество цифр в перестановке'' | '''for''' i = 1 '''to''' n '''do''' ''//n - количество цифр в перестановке'' | ||
− | alreadyWas = (numOfPermutation-1) div | + | alreadyWas = (numOfPermutation-1) div <tex>P_{n} </tex> ''// сколько цифр уже полностью заняты перестановками с меньшим номером'' |
− | numOfPermutation = ((numOfPermutation-1) mod | + | numOfPermutation = ((numOfPermutation-1) mod <tex>P_{n} </tex>) + 1 |
''//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. alreadyWas+1, которая еще не занята'' | ''//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. alreadyWas+1, которая еще не занята'' | ||
'''for''' j = 1 '''to''' n '''do''' | '''for''' j = 1 '''to''' n '''do''' | ||
Строка 18: | Строка 18: | ||
Рассмотрим алгоритм получения i-го в лексикографическом порядке размещения <tex> A^k_n </tex> | Рассмотрим алгоритм получения i-го в лексикографическом порядке размещения <tex> A^k_n </tex> | ||
<tex>A^{k}_{n} </tex> ''- количество размещений из n по k | <tex>A^{k}_{n} </tex> ''- количество размещений из n по k | ||
− | placement[n] | + | placement[n] ''- искомое размещение'' |
− | was[n] | + | was[n] ''- использовали ли мы уже эту цифру в размещении'' |
'''for''' i = 1 '''to''' k '''do''' ''//k - количество цифр в размещении'' | '''for''' i = 1 '''to''' k '''do''' ''//k - количество цифр в размещении'' | ||
− | alreadyWas = (numOfPlacement-1) div <tex> A^{k-i}_{n-i} </tex> ''// сколько цифр уже полностью заняты | + | alreadyWas = (numOfPlacement-1) div <tex> A^{k-i}_{n-i} </tex> ''// сколько цифр уже полностью заняты размещениями с меньшим номером'' |
numOfPlacement = ((numOfPlacement-1) mod <tex> A^{k-i}_{n-i} </tex>) + 1 | numOfPlacement = ((numOfPlacement-1) mod <tex> A^{k-i}_{n-i} </tex>) + 1 | ||
''//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. alreadyWas+1, которая еще не занята'' | ''//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. alreadyWas+1, которая еще не занята'' |
Версия 04:11, 26 октября 2011
Содержание
Перестановки
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки размера n.
- количество перестановок размера n permutation[n] - искомая перестановка was[n] - использовали ли мы уже эту цифру в перестановке for i = 1 to n do //n - количество цифр в перестановке alreadyWas = (numOfPermutation-1) div // сколько цифр уже полностью заняты перестановками с меньшим номером numOfPermutation = ((numOfPermutation-1) mod ) + 1 //сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. alreadyWas+1, которая еще не занята for j = 1 to n do if was[j] = false then cntFree++ if cntFree = alreadyWas+1 then ans[i] = j was[j] = true
Сочетания
Рассмотрим алгоритм получения i-го в лексикографическом порядке размещения
- количество размещений из n по k placement[n] - искомое размещение was[n] - использовали ли мы уже эту цифру в размещении for i = 1 to k do //k - количество цифр в размещении alreadyWas = (numOfPlacement-1) div // сколько цифр уже полностью заняты размещениями с меньшим номером numOfPlacement = ((numOfPlacement-1) mod ) + 1 //сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. alreadyWas+1, которая еще не занята for j = 1 to n do if was[j] = false then cntFree++ if cntFree = alreadyWas+1 then ans[i] = j was[j] = true