Як виміряти "впорядкованість"


34

Мені цікаво, чи існує стандартний спосіб вимірювання "впорядкованості" масиву? Чи вважатиметься масив із середньою кількістю можливих інверсій максимально несортованим? Маючи на увазі, я маю на увазі, що це в основному максимально далеко від сортованого або зворотного сортування.

Відповіді:


31

Ні, це залежить від вашої заявки. Міри впорядкованості часто називають мірами розладу , які є функціями від до , де - це сукупність усіх кінцевих послідовностей різних невід'ємних цілих чисел. Опитування Естівіл-Кастро та Вуда [1] перераховує та обговорює 11 різних заходів розладу в контексті адаптивних алгоритмів сортування. R N < NN<NRN<N

Кількість інверсій може працювати в деяких випадках, але іноді недостатня. Прикладом, наведеним у роботі [1], є послідовність

n/2+1,n/2+2,,n,1,,n/2

який має квадратичну кількість інверсій, але складається лише з двох висхідних прогонів. Він майже відсортований, але це не захоплено інверсіями.


[1] Естівіл-Кастро, Владмір та Дерик Вуд. "Огляд алгоритмів адаптивного сортування." Обчислювальні дослідження обліку ACM (CSUR) 24.4 (1992): 441-476.


2
Контекст намагається зрозуміти, чому кіксорс виконує відносно погано на випадкових перестановках n елементів, де кількість інверсій близька до медіани.
Роберт С. Барнс

1
Чудовий приклад, це саме та інформація, яку я шукав.
Роберт С. Барнс

1
Estivill-Кастро і Вуд посилання на це точно.
Педро Дуссо

10

Маніла [1] аксіоматизує прискіпливість (з акцентом на алгоритмах на основі порівняння) наступним чином (перефразовуючи).

Нехай повністю упорядкований набір. Тоді відображення від (послідовності відмінних елементів від ) до натуралів - це міра пресортованості, якщо вона задовольняє нижчим умовам.m Σ ΣΣmΣΣ

  1. Якщо відсортовано, то . m ( X ) = 0XΣm(X)=0

  2. Якщо з , і для всіх , тоді .X,YΣX=x1xnY=y1ynxi<xiyi<yji,j[1..n]m(X)=m(Y)

  3. Якщо - це підряд , то .XYΣm(X)m(Y)

  4. Якщо для всіх і для деяких , то .xi<yji[1..|X|]j[1..|Y|]X,YΣm(XY)m(X)+m(Y)

  5. m(aX)|X|+m(X) для всіх і .XΣaEX

Прикладами таких заходів є:

  • кількість інверсій,
  • кількість свопів,
  • кількість елементів, які не є максимумами зліва направо, і
  • довжина найдовшого зростаючої послідовності (віднімається від вхідної довжини).

Зауважимо, що визначені випадкові розподіли за допомогою цих заходів, тобто такі, які роблять більш / менш відсортовані послідовності більш-менш ймовірними. Вони називаються Евенсоподібними розподілами [2, гол. 4-5; 3, приклад 12; 4], особливим випадком якого є так званий розподіл Мальви . Ваги параметричні в постійній і виконуютьθ>0

Pr(X)=θm(X)YΣΣ|X|θm(Y) .

Зверніть увагу, як визначає рівномірний розподіл (для всіх ).мθ=1m

Оскільки є можливість вибірки перестановок з цими заходами ефективно, цей комплекс роботи може бути корисним на практиці при порівняльному алгоритмі сортування.


  1. Х. Маніла (1985) " Заходи президентства та оптимальні сортування алгоритмів сортування"
  2. Логарифмічні комбінаторні структури: ймовірнісний підхід Р. Аррація, А. Д. Барбура та С. Таваре (2003)
  3. Про додавання списку чисел (та інших однозалежних детермінантних процесів) А. Бородіна, П. Діаконіса та Дж. Фулмана (2010)
  4. Евенсоподібні розподіли та аналіз алгоритмів Н. Оже та ін. (2016 р.)

3

У мене є власне визначення «впорядкованості» послідовності.

З огляду на будь-яку послідовність [a, b, c, ...] ми порівнюємо її з відсортованою послідовністю, що містить однакові елементи, підраховуємо кількість збігів і ділимо її на кількість елементів у послідовності.

Наприклад, із заданої послідовності [5,1,2,3,4]ми діємо так:

1) сортувати послідовність: [1,2,3,4,5]

2) порівняйте відсортовану послідовність з оригіналом, перемістивши її по одній позиції за часом і підрахувавши максимальну кількість збігів:

        [5,1,2,3,4]
[1,2,3,4,5]                            one match

        [5,1,2,3,4]
  [1,2,3,4,5]                          no matches

        [5,1,2,3,4]
    [1,2,3,4,5]                        no matches

        [5,1,2,3,4]
      [1,2,3,4,5]                      no matches

        [5,1,2,3,4]
        [1,2,3,4,5]                    no matches

        [5,1,2,3,4]
          [1,2,3,4,5]                  4 matches

        [5,1,2,3,4]
            [1,2,3,4,5]                no matches

                ...

         [5,1,2,3,4]
                 [1,2,3,4,5]            no matches

3) Максимальна кількість збігів дорівнює 4, "впорядкованість" ми можемо обчислити як 4/5 = 0,8.

Сортированість відсортованої послідовності була б 1, а сортування послідовності з елементами, розміщеними у зворотному порядку, було б 1 / n.

Ідея цього визначення полягає в тому, щоб оцінити мінімальний обсяг роботи, який нам потрібно буде виконати для перетворення будь-якої послідовності в відсортовану послідовність. У наведеному вище прикладі нам потрібно перемістити лише один елемент, 5 (існує багато способів, але переміщення 5 є найбільш ефективним). Коли елементи будуть розміщені в зворотному порядку, нам потрібно буде перемістити 4 елементи. І коли сортували послідовність, робота не потрібна.

Сподіваюся, моє визначення має сенс.


Хороша ідея. Аналогічне визначення - Екс-Екс, третє визначення розладу в роботі, згаданому у відповіді Джухо . Exc - кількість операцій, необхідних для переупорядкування послідовності в упорядкованому порядку.
Apass.Jack

Ну, може, я просто застосував своє розуміння ентропії та розладу до послідовності елементів :-)
Андрушенко Олександр

-2

Якщо вам потрібно щось швидке і брудне (знаки підсумовування мене лякають), я написав надлегку функцію розладу в C ++ для класу з назвою Array, який генерує масиви Int, заповнені випадковим чином згенерованими числами:

void Array::disorder() {
    double disorderValue = 0;
    int counter = this->arraySize;
    for (int n = 0; n < this->arraySize; n++) {
        disorderValue += abs(((n + 1) - array[n]));
//      cout << "disorderValue variable test value = " << disorderValue << endl;
        counter++;
    }
    cout << "Disorder Value = " << (disorderValue / this->arraySize) / (this->arraySize / 2) << "\n" << endl;
}

Функція просто порівнює значення кожного елемента з індексом елемента + 1, так що масив у зворотному порядку має значення розладу 1, а відсортований масив має значення розладу 0. Не складний, але працює.

Майкл


Це не сайт програмування. Було б достатньо визначити поняття розладу і згадати, що його можна обчислити за лінійним часом.
Yuval Filmus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.