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

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

Версия 01:36, 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] // сколько цифр уже полностью заняты предыдущими перестановками
  //сейчас мы должны поставить ту цифру которая еще полностью не занята, т.е. 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]


Сочетания

Размещения

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

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