Материал из Викиконспекты
Перестановки
Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки.
[math]f[n]=n![/math]
[math]ans[n][/math] //искомая перестановка
[math]was[n][/math] //использовали ли мы уже эту цифру в переставновке
for [math] i = 1 [/math] to [math] n [/math] do //n-это количество цифр в перестановке
[math] alreadyWas = (numOfPermutation-1) div f[n-i] [/math]
[math] numOfPermutation = (numOfPermutation-1) mod f[n-i] [/math] // сколько цифр уже полностью заняты предыдущими перестановками
//сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. AlreadyWas+1
for [math] j = 1 [/math] to [math] n [/math] do
if [math] was[j] = false [/math]
then [math] cntFree++ [/math]
if [math] cntFree = AlreadyWas+1 [/math]
then [math] ans[i] = j [/math]
[math] was[j] =w true [/math]
Сочетания
for [math]v \in V[/math]
do [math]d[v] \gets +\infty[/math]
[math]d[s] \gets 0[/math]
for [math]i \gets 1[/math] to [math]|V| - 1[/math]
do for [math](u, v) \in E[/math]
if [math]d[v] \gt d[u] + w(u, v)[/math]
then [math]d[v] \gets d[u] + w(u, v)[/math]
return [math]d[/math]
Размещения
Битовые вектора
Скобочные последовательности