Skip to content

Commit 16a9a52

Browse files
committed
inversions edits
1 parent ac89061 commit 16a9a52

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

‎content/russian/cs/sequences/inversions.md‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@ title: Число инверсий
44
weight: 5
55
authors:
66
- Сергей Слотин
7+
draft: true
78
---
89

9-
Пусть у нас есть некоторая перестановка $p$ (какая-то последовательность чисел от $1$ до $n$, где все числа встречаются ровно один раз). *Инверсией* называется пара индексов $i$ и $j$ такая, что $i < j$ и $p_i > p_j$. Требуется найти количество инверсий в данной перестановке.
10+
**Определение.** *Инверсией* в перестановке $p$ называется пара индексов $i$ и $j$ такая, что $i < j$ и $p_i > p_j$.
1011

11-
## Наивный алгоритм
12+
Например:
1213

13-
Эта задача легко решается за $O(n^2)$ обычным перебором всех пар индексов и проверкой каждого на инверсию:
14+
- в перестановке $[1, 2, 3]$ инверсий нет,
15+
- в $[1, 3, 2]$ одна инверсия ($3 \leftrightarrow 2$),
16+
- в $[3, 2, 1]$ три инверсии ($3 \leftrightarrow 2$, $3 \leftrightarrow 1$ и $2 \leftrightarrow 1$).
17+
18+
В этой статье мы рассмотрим, как находить количество инверсий в перестановке. Эта задача легко решается за $O(n^2)$ обычным перебором всех пар индексов и проверкой каждого на инверсию:
1419

1520
```cpp
1621
int count_inversions(int *p, int n) {
@@ -23,6 +28,8 @@ int count_inversions(int *p, int n) {
2328
}
2429
```
2530
31+
Решить её быстрее сложнее.
32+
2633
## Сортировкой слиянием
2734
2835
Внезапно эту задачу можно решить сортировкой слиянием, слегка модифицировав её.

0 commit comments

Comments
 (0)