Получение объекта по номеру — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 18: Строка 18:
  
 
== Сочетания ==
 
== Сочетания ==
 +
'''for''' <tex>v \in V</tex>
 +
  '''do''' <tex>d[v] \gets +\infty</tex>
 +
<tex>d[s] \gets 0</tex>
 +
'''for''' <tex>i \gets 1</tex> '''to''' <tex>|V| - 1</tex>
 +
  '''do for''' <math>(u, v) \in E</math>
 +
    '''if''' <tex>d[v] > d[u] + w(u, v)</tex>
 +
      '''then''' <tex>d[v] \gets d[u] + w(u, v)</tex>
 +
'''return''' <tex>d</tex>
 
== Размещения ==
 
== Размещения ==
 
== Битовые вектора ==
 
== Битовые вектора ==
 
== Скобочные последовательности ==
 
== Скобочные последовательности ==

Версия 01:50, 26 октября 2011

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

Рассмотрим алгоритм получения 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]

Размещения

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

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