Получение объекта по номеру
Версия от 03:27, 26 октября 2011; Antonkov (обсуждение | вклад)
Перестановки
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки.
f[n]=n! permutation[n] //искомая перестановка was[n] //использовали ли мы уже эту цифру в переставновке for i = 1 to n do //n-это количество цифр в перестановке alreadyWas = (numOfPermutation-1) div f[n-i] // сколько цифр уже полностью заняты предыдущими перестановками numOfPermutation = ((numOfPermutation-1) mod f[n-i]) + 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