Сколько инверсий существует в двоичной строке длины n?Инверсии в двоичной строке
For example , n = 3
000->0
001->0
010->1
011->0
100->2
101->1
110->2
111->0
So total inversions are 6
Сколько инверсий существует в двоичной строке длины n?Инверсии в двоичной строке
For example , n = 3
000->0
001->0
010->1
011->0
100->2
101->1
110->2
111->0
So total inversions are 6
Вопрос выглядит как домашнее задание, поэтому позвольте мне опустить детали. Вы можете:
c1
, c2
,. .., cn
); по сути, вы получите только один неизвестная константа.f(1) = 0
, f(3) = 6
) в формулу и найти все неизвестные коэффициентыОкончательный ответ вы должны получить это
f(n) = n*(n-1)*2**(n-3)
где **
означает повышение в мощности (2**(n-3)
есть 2
в n-3
мощность). Если вы не хотите иметь дело с ревальвацией и т.п., вы можете просто доказать формулу индукцией.
Простая рекуррентная функция. Предположим, что мы знаем ответ для n-1. И после всех предыдущих последовательностей мы добавляем 0 или 1 в качестве первого символа.
если мы добавим 0 в качестве первого символа, что означает, что количество инверсий не будет изменено: следовательно ответ будет таким же, как и для n-1.
если мы добавим 1 в качестве первого символа, что означает количество инверсий, будет таким же, как и раньше, и будет добавлено дополнительное инвертирование равным 0 во все предыдущие последовательности.
Количество нулей ANS единиц в последовательности длины n-1
будет:
(n-1)*2^(n-1)
Половина из них нулей это даст следующий результат
(n-1)*2^(n-2)
Это означает, что мы имеем следующие формулы:
f(1) = 0
f(n) = 2*f(n-1) + (n-1)*2^(n-2)
Идя немного дальше, мы можем получить * близкую формулу *, которая является 'f (n) = n * (n-1) * 2^(n-3)'; в случае, если кто-то не хочет решать характерное уравнение подобным, он может просто доказать решение * индукцией * –
Что вы подразумеваете под «инверсиями»? –
Пожалуйста, приложите немного усилий. Можете ли вы сделать решение грубой силы? – SergeyS