394
правки
Изменения
→Перестановки
was[n] ''{{---}} использовали ли мы уже эту цифру в перестановке''
'''for''' i = 1 '''to''' n '''do''' ''//n - количество цифр в перестановке''
'''for''' j = 1 '''to''' a[i]-1 '''do''' ''//перебираем элемент который может стоять на i-м месте лексикографически меньше нашего '''if''' was[j] = false '' если элемент j ранее не был использован '''then ''' numOfPermutation += <tex>P_{n-i} </tex> ''// все перестановки с префиксом длиной i-1 равным нашему, и i-й элемент у которых меньше нашего в лексикографическом порядке идут раньше данной престановки was[i] = true Данный алгоритм работает за <tex>O(n^2) < /tex>. Мы можем посчитать <tex>P_{n} </tex> за <tex>O(n) </tex>. Асимптотику можно улучшить до <tex>O(n log {n}) </tex>, если использовать структуры данных, которые позволяют искать элемент i-ый элемент множества и удалять элемент множества за <tex>O( log {n}) </tex>. Например декартово дерево по неявному ключу.использован
Данный алгоритм работает за <tex>O(n^2) </tex>.
== Битовые вектора ==