48
правок
Изменения
Изменены псевдокоды для перестановок и для бинарных векторов и некоторые пунктуационные и грамматические ошибки.
numOfObject = 0
'''for''' i = 1 '''to''' n '''do''' ''// перебираем элементы комбинаторного объекта''
'''for''' j = 1 '''to''' a[i] - 1 '''do''' ''// перебираем элементы , которые в лексикографическом порядке меньше рассматриваемого''
'''if''' элемент j можно поставить на i-e место
'''then''' numOfObject += d[i][j]
*was[1..n] {{---}} использовали ли мы уже эту цифру в перестановке.
'''for''' i = 1 '''to''' n '''do''' ''// n - количество цифр в перестановке'' '''for''' j = 1 '''to''' a[i] - 1 '''do''' ''// перебираем элемент, лексикографически меньший нашего, который может стоять на i-м месте лексикографически меньше нашего '''begin''' '''if''' was[j] == false ''// если элемент j ранее не был использован '''then''' numOfPermutation += P[n - i] ''// все перестановки с префиксом длиной i-1 равным нашему, и i-й элемент у которых меньше '''end''' '' нашего в лексикографическом порядке идут раньше данной перестановки was[a[i]] = true ''// i-й элемент i использован
Данный алгоритм работает за <tex>O(n ^ 2) </tex>.
*bitvector[1..n] {{---}} данный вектор.
'''for''' i = 1 '''to''' n '''do'''
'''if''' bitvector[i] == 1 '''{''' numOfBitvector += Pow(2,n - i) '''}'''
== См. также ==