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