2
правки
Изменения
м
Лишняя переменная P, кол-во перестановок = n!
Рассмотрим алгоритм получения номера в лексикографическом порядке по данной перестановке размера <tex>n</tex>,
*<tex>\mathtt{a[1..n]}</tex> {{---}} данная перестановка,
*<tex>\mathtt{P[1..(n]- i)!}</tex> {{---}} количество перестановок данного размера<tex>(n - i)</tex>,
*<tex>\mathtt{was[1..n]}</tex> {{---}} использовали ли мы уже эту цифру в перестановке,
'''for''' j = 1 '''to''' a[i] - 1 <font color=green>// перебираем элементы, лексикографически меньшие нашего, которые могут стоять на <tex>i</tex>-м месте</font>
'''if''' was[j] == ''false'' <font color=green>// если элемент <tex>j</tex> ранее не был использован</font>
numOfPermutation += P[(n - i] )! <font color=green>// все перестановки с префиксом длиной <tex>i-1</tex> равным нашему, и <tex>i</tex>-й элемент у которых</font>
<font color=green>меньше нашего в лексикографическом порядке, идут раньше данной перестановки</font>
was[a[i]] = ''true'' <font color=green>// <tex>i</tex>-й элемент использован</font>