Чи можна перевірити сортування списку, не порівнюючи сусідів?


14

Список n -item можна перевірити як упорядкований, порівнюючи кожен елемент із сусідом. У своїй програмі я не зможу порівнювати кожен предмет із його сусідом: натомість порівняння часом будуть між віддаленими елементами. Зважаючи на те, що список містить більше трьох елементів, а також те, що порівняння є єдиною підтримуваною операцією, чи існує коли-небудь "мережа" порівнянь, яка доведе, що список сортується, але відсутній принаймні один прямий сусід-сусід порівняння?

Формально для послідовності елементів ei я маю набір пар індексів (j,k) для яких я знаю, чи ej>ek , ej=ek , або ej<ek . Існує пара (l,l+1) яка відсутня в наборі порівнянь. Чи можливо коли-небудь довести, що послідовність сортується?


1
Примітка у випадку, якщо хтось знайде цю сторінку пізніше із запитанням, чи можна перевірити сортування списку, не порівнюючи нічого; Тільки якщо ви можете поставити деякі обмеження на входи та / або знати щось про форму входів; (напр., радіаційний сорт).
HammerN'Songs

Однак існує можливість оптимізації кількості порівнянь, що застосовуються у випадках, коли вони не відсортовані.
Накопичення

1
@ Накопичення Чи існує насправді така можливість? Слід взяти участь у такій програмі та скласти змагальний список довжини n, який змушує програму робити n-1 порівняння. Дивіться також "Противник вбивць" для QuickSort , який ще більше піднімає цю ідею, щоб змусити швидкодіяти в поганій частині його асимптотичного аналізу.
Даніель Вагнер

@DanielWagner Так, таку оптимізацію потрібно робити стосовно очікуваного введення конкретної програми.
Накопичення

Напевно, це неможливо. Але уточніть, будь ласка, ви мали на увазі, що ви знаєте лише порівняння форми (j, j + 1), а не загальні (j, k)? Наприклад, чи знаєте ви коли-небудь порівняння двох позицій індексів (j, j + 3)?
Рон

Відповіді:


34

Це неможливо. Припустимо, у вас є результат усіх порівнянь, крім пари (i,i+1) . Тоді ви б не змогли розрізнити наступні два випадки:

1,2,,i1,i,i+1,i+2,,n1,2,,i1,i+1,i,i+2,,n

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