Назва цієї проблеми з перестановкою / сортуванням?


10

Вам надається масив довжиною . Кожен елемент масиву належить до одного з K класів. Ви повинні переставити масив, використовуючи мінімальну кількість операцій підкачки, щоб усі елементи з одного класу завжди групувалися, тобто вони утворювали суміжний підмасив. Наприклад: nK
Залишаються три інші чинні домовленості.

[2,1,3,3,2,2][2,2,2,1,3,3], or[2,1,3,3,2,2][1,2,2,2,3,3], or[2,1,3,3,2,2][3,3,2,2,2,1].

Як називається ця проблема в літературі? Чи існує ефективний алгоритм для цього?


1
Я не впевнений, що ця проблема має назву, хоча це, безумовно, можливо. Не всі мислимі проблеми мають назви.
Yuval Filmus

2
На практиці це можна назвати групуванням . Мені не відома термінологія в класичній алгоритміці. (Це, безумовно, цікава, і потенційно важка проблема! Зведення до мінімуму кількості свопів має відчуття «знайти найкращу перестановку груп», яка, в свою чергу, відчуває себе NP-hard-ish.)
Рафаель

Ну хлопці, дякую зараз. Звичайно, я зацікавлений у вирішенні проблеми, але подумав, що вона вже вивчена, тому просив довідки.
Марко Букал

Відповіді:


6

Примітка: Це твердість твердості, і я думаю, що існують такі практичні алгоритми, як ціле програмування тощо.

З огляду на екземпляр BIN_PACKING, де потрібно запакувати числа n 1 , , n K у L- бункери розміром m 1 , , m L , і гарантується, що n i = m j = N , тоді ми могли б спроектувати приклад вашої проблеми наступним чином:Kn1,,nKLm1,,mLni=mj=N

  • Є класи ;K+(N+1)(L1)
  • Перші класи мають розмір n 1 , ... , n K відповідно, а кожен з інших класів має розмір N + 1 ;;Kn1,,nKN+1
  • Масив розподіляється на слоти розміром: де кожен розмір розміру ( N + 1 ) 2 упаковані N + 1 класами, розташованими безперервно, а решта довільно розташовані.
    m1,(N+1)2,m2,(N+1)2,m3,,(N+1)2,mL
    (N+1)2N+1

(N+1)2N


Nm1,,mL(N+1)2(N+1)N+1поміняється вже, тому ми не можемо) або "просуньте" всю річ однією позицією вліво або вправо (але це тягне за собою "ковзання" кожної ...
j_random_hacker

N+1N+1N

1

Я також підозрюю, що це NP-важко, але за відсутності ідеї для доказування, ось кілька швидко обчислюваних нижніх меж, які можуть бути корисні для перевірки оптимальності евристичного рішення або обрізання пошуку, пов'язаного з гілкою. .

iniijLiijinijLiiO(n)O(Kn)

  1. LiK=2K
  2. Li

У вашому прикладі ці межі дають 1 (0,5 можна округнути в останньому випадку), що, звичайно, є вільним.

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