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

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

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

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

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

[math]f[n]=n![/math]
[math]ans[n][/math] //искомая перестановка
[math]was[n][/math] //использовали ли мы уже эту цифру в переставновке
for [math] i \leftarrow 1 [/math] to [math] n [/math] do    // n-это количество цифр в перестановке
  AlreadyWas [math] i \leftarrow [/math] (NumOfPermutation-1) div f[n-i]             // сколько цифр уже полностью заняты предыдущими перестановками
  //сейчас мы должны поставить ту цифру которая еще полностью не занята, т.е. AlreadyWas+1
  for [math] j \leftarrow 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] \leftarrow j [/math]
             [math] was[j] \leftarrow TRUE [/math]


Сочетания

Размещения

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

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