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