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

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

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

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

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

Размещения

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

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