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

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

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

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

Рассмотрим алгоритм получения i-ой в лексикографическом порядке перестановки.

 <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 


Сочетания

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]

Размещения

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

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