Получение объекта по номеру

Материал из Викиконспекты
Версия от 01:57, 26 октября 2011; Antonkov (обсуждение | вклад) (Перестановки)
Перейти к: навигация, поиск

Перестановки

Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки. <source lang="c">

 f[n]=n!
 ans[n]                                                    //искомая перестановка
 was[n]                                                    //использовали ли мы уже эту цифру в переставновке
 for  i = 1  to  n  do              //n-это количество цифр в перестановке
   alreadyWas = (numOfPermutation-1) div f[n-i]   
   numOfPermutation = (numOfPermutation-1) mod f[n-i]   // сколько цифр уже полностью заняты предыдущими перестановками
  //сейчас мы должны поставить ту цифру, которая еще полностью не занята, т.е. AlreadyWas+1
  for  j = 1  to  n  do
    if  was[j] = false  
      then   cntFree++ 
    if  cntFree = AlreadyWas+1  
     then   ans[i] = j 
            was[j] =w true

</source>

Сочетания

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]

Размещения

Битовые вектора

Скобочные последовательности