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


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,…,mL∑ni=∑mj=N

  • Є класи ;K+(N+1)(L−1)
  • Перші класи мають розмір 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+1≤N

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.