Задача про розбиття

У теорії чисел та інформатиці, задачею про розбиття (або розбиття числа[1]) є визначення того, чи можна дану множину S натуральних чисел розбити на дві підмножини S1 і S2 так, щоб сума чисел у S1 дорівнювала сумі чисел в S2. Хоча задача про розбиття NP-повна, існує псевдо-поліноміальне рішення динамічного програмування часу, і є евристики, які вирішують цю задачу оптимально або приблизно. З цієї причини її назвали «найлегшою NP-важкою задачею» [2].

Існує версія оптимізації задачі про розбиття, яка полягає в розбитті мультимножини S на дві підмножини S1, S2, так що різниця між сумою елементів в S1 і сумою елементів в S2 мінімізована. Оптимізаційна версія NP-важка, але на практиці її можна ефективно вирішити.[3]

Задача про розбиття є окремим випадком задачі про суми підмножин, тому її можна точно розв'язати за час O(2S/2).

Приклади

Якщо S = {3,1,1,2,2,1}, дійсним рішенням задачі розподілу є дві множини S1 = {1,1,1,2} and S2 = {2,3}. Обидва набори мають суму 5, та утворюють розбиття множини S. Зверніть увагу, що це рішення не є унікальним. S1 = {3,1,1} and S2 = {2,2,1} - інше рішення. Не кожну множину позитивних цілих чисел можна розбити на дві частини з однаковою сумою. Прикладом такого набору є S = {2,5}.

Алгоритм псевдо-поліноміального часу

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

Припустимо, що вхідним значенням для алгоритму є список форми: S = x1, ..., xn

Нехай N - кількість елементів в S. Нехай K - сума всіх елементів в S. Тобто: K = x1 + ... + xn. Ми побудуємо алгоритм, який визначає, чи існує підмножина S, яка додається до . Якщо є підмножина, то:

Якщо сума K парна, залишок S також підсумовується до

Якщо сума K непарна, то залишок S підсумовується з . Це найкраще рішення.

Рекурентне відношення

Ми хочемо визначити, чи існує підмножина S, котра дорівнює . Нехай:

p(i, j) буде Істина (True), якщо мультимножина { x1, ..., xj } дорівнює i , та Хибно (False), якщо навпаки.

Тоді p(, n) - це Істина тоді та тільки тоді, коли існує мультимножина S, котра дорівнює . Метою нашого алгоритму буде обчислення p(, n). Для цього ми маємо наступне рекурентне співвідношення:

p(i, j) істинно, якщо p(i, j − 1) істинно або p(ixj, j − 1) істинно,
p(i, j) хибне, навпаки.

Це пояснюється наступним чином: є деяка підмножина S, яке підсумовує з i, використовуючи числа

x1, ..., xj

Тоді та тільки тоді, коли виконано одну з наступних умов:

Існує підмножина { x1, ..., xj-1 } , котра дорівнює i;
Існує підмножина { x1, ..., xj-1 } котра дорівнює ixj, коли xj + сума підмножини = i.

Псевдо-поліноміальний алгоритм

Алгоритм полягає в тому, щоб створити таблицю розміру по n , що містить значення повторення. Пам'ятайте, що K - це розмір суми, а N - це . кількість елементів. Коли вся таблиця заповнена, поверніть P(, n). Нижче наведено зображення таблиці P. Існує синя стрілка від одного блоку до іншого, якщо значення цільового блоку може залежати від значення вихідного блоку. Ця залежність є властивістю рекурентного співвідношення.

Залежність записів у таблиці (i, j)
INPUT:  A list of integers S
OUTPUT: True if S can be partitioned into two subsets that have equal sum
1 function find_partition(S):
2     n ← |S|
3     Ksum(S)
4     P ← empty boolean table of size ( + 1) by (n + 1)
5     initialize top row (P(0,x)) of P to True
6     initialize leftmost column (P(x, 0)) of P, except for P(0, 0) to False
7     for i from 1 to 
8         for j from 1 to n
9             if (i-S[j-1]) >= 0
10               P(i, j)P(i, j-1) or P(i-S[j-1], j-1)
11            else
12               P(i, j)P(i, j-1)
13    return P(, n)

Приклад

Нижче наведена таблиця P для прикладу, що використовується вище S = {3, 1, 1, 2, 2, 1}:

Результат виконання прикладу алгоритму на таблиці P

Аналіз

Цей алгоритм працює з часом O(K N), де N - кількість елементів у наборі вхідних даних та K - сума елементів у вхідній множині.

Алгоритм може бути розширений до k-задачі багаторозбиття, але потім приймає O(n(k − 1)mk − 1) пам'ять, де m - найбільше число на вході, що робить його непрактичним навіть для k = 3 , якщо входи не є дуже маленькими числами. [3]

Цей алгоритм можна узагальнити для вирішення задачі про суми підмножин.

Апроксимаційні алгоритми

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

Жадібний алгоритм

Один з підходів до задачі, що імітує те, як діти вибирають команди для гри, — це жадібний алгоритм, який виконує ітерацію за номерами в порядку убування, привласнюючи кожному з них те, що підмножина має меншу суму. Цей підхід має час роботи  O(n log n). Ця евристика добре працює на практиці, коли цифри в наборі приблизно того ж розміру, що і потужність, або менше, але не гарантується, що буде створений найкращий розділ. Наприклад, якщо ввести S = {4, 5, 6, 7, 8} як вхідні дані, цей жадібний алгоритм розбив би S на підмножини {4, 5, 8} та {6, 7}; однак, S має точно збалансоване розбиття на підмножини {7, 8} та {4, 5, 6}.

Відомо, що цей жадібний підхід дає 76-наближення до оптимального рішення версії оптимізації; Тобто, якщо жадібний алгоритм виводить два набори A та B, то max(∑A, ∑B) ≤ 7/6 OPT, де OPT це розмір більшого набору в найкращому можливому розділі.[4]Нижче наведено приклад (написаний на мові Python) для жадібного алгоритму..

def find_partition(int_list):
    "returns: An attempt at a partition of `int_list` into two sets of equal sum"
    A = set()
    B = set()
    for n in sorted(int_list, reverse=True):
        if sum(A) < sum(B):
           A.add(n)
        else:
           B.add(n)
    return (A, B)

Цей алгоритм може бути поширений на випадок k > 2 множин: для того, щоб узяти k найбільших елементів і для кожного розбиття їх розширює розділ, послідовно додаючи інші елементи в залежності від того, який набір менше. (Проста версія вище відповідає k = 2.) Ця версія працює в часі O(2k n2) і, як відомо, дає (k + 2)/(k + 1) наближення.[4] Таким чином, ми маємо схему наближення поліноміального часу (PTAS) для завдання про розбиття чисел, хоча це не повністю поліноміальна схема наближення часу (час роботи є експоненціальним у гарантованій задачі наближення). Однак існують варіанти цієї ідеї, які є повністю поліноміальними схемами апроксимації для завдання підмножини, а отже, і для завдання розбиття.[5]

Метод найбільшої різниці

Іншою евристикою є метод найбільшої різниці (largest differencing method, LDM),[6] що також має назву евристика КармаркараКарпа, за прізвищами пари вчених, що опублікували роботу по цій темі в 1982 році.[7] LDM працює в два етапи. Перша фаза алгоритму приймає два найбільших числа від входу і замінює їх їхньою різницею. Це повторюється до тих пір, поки не залишиться тільки одне число. Заміна є рішення розмістити два числа в різних наборах, не вдаючись до негайного визначення того, в якому з них встановлено. В кінці першого етапу єдиним числом, що залишилося, буде різниця двох сум підмножини. Друга фаза реконструює фактичне рішення.[2]

Евристика різниць працює краще, ніж жадібна, але все ще погано для випадків, коли числа є експоненційними за розміром набору.[2]

Наступна програма на Java реалізує перший етап Кармаркара — Карпа. Він використовує купу, щоб знайти пару найбільших чисел, які залишилися.

int karmarkarKarpPartition(int[] baseArr) {	
    // create max heap	
    PriorityQueue<Integer> heap = new PriorityQueue<Integer>(baseArr.length, REVERSE_INT_CMP);

    for (int value : baseArr) {		
        heap.add(value);	
    }

    while(heap.size() > 1) {
        int val1 = heap.poll();	
        int val2 = heap.poll();	
        heap.add(val1 - val2);
    }

    return heap.poll();
}

Інші підходи

Існують також алгоритми будь-якого часу[en], засновані на евристичному різницевої аналізі, які спочатку знаходять рішення, повернене евристикою разностного аналізу, потім знаходять прогресивно кращі рішення в міру того, як дозволяє час (можливо, вимагаючи експоненціального часу для досягнення оптимальності для найгірших випадків).[8]

Жорсткі інстанції

Набори з одним або без поділу, як правило, складніше (або найбільш дорогі) вирішувати в порівнянні з їх розмірами введення. Коли значення малі в порівнянні з розміром набору, більш досконалі розділи більш вірогідні. Відомо, що задача зазнає «фазовий перехід»; Ймовірно, для деяких наборів і малоймовірно для інших. Якщо m — число біт, необхідне для вираження будь-якого числа в наборі, а n — розмір набору, то має багато рішень і , як правило, мало або взагалі не має рішень. У міру того як n і m стають більше, ймовірність вчиненого розбиття дорівнює 1 або 0 відповідно. Це спочатку стверджувалося на основі емпіричних даних Гента і Уолша[9], потім використовуючи методи статистичної фізики Мертенса[10], а потім довів Боргс, Чайс і Піттель.[11]

Варіанти та узагальнення

Існує задача, звана задача про трирозбиття[en], яка полягає в розбитті множини S до |S|/3 трійок з однаковою сумою. Ця задача суттєво відрізняється від задачі розділу і не має псевдо-поліноміального алгоритму часу, якщо P = NP.[12]

Задача багатосторінкового розділу узагальнює оптимізаційну версію задачі про розбиття. Тут мета полягає в тому, щоб розбити безліч або мультимножину з n цілих чисел на задане число k підмножин, мінімізуючи різницю між найменшою і найбільшою сумою підмножини.[3]

Для подальших узагальнень задачі про розбиття див. задачі про пакування в ємності.

Імовірнісна версія

Пов'язана з цим задача, в чомусь схожа на парадокс днів народження, полягає у визначенні розміру вхідної множини так, щоб ймовірність існування розв'язку була 50%, за припущення, що кожен елемент в наборі вибирається випадково за рівномірним розподілом між 1 і деяким заданим значенням.

Вирішення цієї задачі може бути нелогічним, як парадокс дня народження. Наприклад, якщо елементи вибираються випадковим чином в межах від 1 до 1 мільйона, інтуїція багатьох людей полягає в тому, що відповідь знаходиться в тисячах, десятках або навіть в сотнях тисяч, тоді як правильна відповідь становить приблизно 23 (див. Парадокс днів народження § апроксимація).[джерело?]

Нотатки

  • Hayes, Brian (May–June 2002), The Easiest NP Hard Problem, American Scientist, архів оригіналу за 21 травня 2017, процитовано 23 травня 2017
  • Karmarkar, Narenda; Karp, Richard M (1982), The Differencing Method of Set Partitioning, Technical Report UCB/CSD 82/113, University of California at Berkeley: Computer Science Division (EECS)
  • Gent, Ian; Walsh, Toby (August 1996), Wolfgang Wahlster (ред.), Phase Transitions and Annealed Theories: Number Partitioning as a Case Study, John Wiley and Sons, с. 170—174, архів оригіналу за 4 березня 2016, процитовано 23 травня 2017
  • Gent, Ian; Walsh, Toby (1998), Analysis of Heuristics for Number Partitioning, Computational Intelligence, 14 (3): 430—451, doi:10.1111/0824-7935.00069
  • Mertens, Stephan (November 1998), Phase Transition in the Number Partitioning Problem, Physical Review Letters, 81 (20): 4281, arXiv:cond-mat/9807077, Bibcode:1998PhRvL..81.4281M, doi:10.1103/PhysRevLett.81.4281, процитовано 3 жовтня 2009

Примітки

  1. Korf, 1998
  2. а б в Hayes, 2002
  3. а б в г Korf, Richard E. (2009). Multi-Way Number Partitioning (PDF). IJCAI. Архів оригіналу (PDF) за 27 листопада 2014. Процитовано 18 травня 2017.
  4. а б Ron L. Graham (1969). Bounds on multiprocessor timing anomalies. SIAM J. Appl. Math. Т. 17, № 2. с. 416—429.
  5. Martello, Silvano; Toth, Paolo (1990). 4 Subset-sum problem. Knapsack problems: Algorithms and computer interpretations. Wiley-Interscience. с. 105–136. ISBN 0-471-92420-2. MR 1086874.
  6. Michiels, Wil; Korst, Jan; Aarts, Emile (2003). Performance ratios for the Karmarkar–Karp differencing method. Electronic Notes in Discrete Mathematics. 13: 71—75.
  7. Karmarkar та Karp, 1982
  8. Korf, 1998, Mertens, 1999
  9. Gent та Walsh, 1996
  10. Mertens, 1998
  11. Borgs, Chayes та Pittel, 2001
  12. Garey, Michael; Johnson, David (1979). Computers and Intractability; A Guide to the Theory of NP-Completeness. с. 96–105. ISBN 0-7167-1045-5.

Read other articles:

Число выбывших из России и прибывших в Россию в 1993—2009 годах, тыс. человек Число выбывших и прибывших в РФ в 1997—2013 годах, тыс. человек Иммиграция в Россию (также переселение в Россию) — процесс въезда иностранных граждан для постоянного жительства на территорию Российс...

 

KonradPangeran Sachsen-MeiningenKepala Wangsa Sachsen-MeiningenPeriode4 Oktober 1984 - kiniPendahuluPangeran BernhardInformasi pribadiKelahiran14 April 1952 (umur 71)Ziegenberg, JermanWangsaWangsa Sachsen-MeiningenNama lengkapJohann Friedrich Konrad Carl Eduard Horst Arnold MatthiasAyahBernhard, Pangeran Sachsen-MeiningenIbuBaroness Vera Schäffer dari Bernstein Konrad, Pangeran Sachsen-Meiningen, Adipati Sachsen (terlahir dengan nama: Johann Friedrich Konrad Carl Eduard Horst Arnold Mat...

 

Street in Sydney, Australia Bayswater RoadNew South WalesBayswater Road in Kings Cross in 1929West endEast endCoordinates 33°52′29″S 151°13′21″E / 33.874768°S 151.222531°E / -33.874768; 151.222531 (West end) 33°52′34″S 151°13′37″E / 33.876215°S 151.226860°E / -33.876215; 151.226860 (East end) General informationTypeStreetLength700 m (0.4 mi)[1]GazettedDecember 1964[2]Formerroute number St...

Bahan bakar diesel tidak dapat larut dalam air. Pola pelangi yang cerah adalah hasil dari interferensi film tipis. Ketercampuran atau misibilitas adalah sifat kemampuan dua zat untuk bercampur dalam semua perbandingan (yaitu, saling mensolvasi sempurna satu sama lain pada konsentrasi berapapun), membentuk larutan homogen. Istilah ini paling sering diterapkan pada cairan, tetapi berlaku juga untuk padatan dan gas. Air dan etanol, misalnya, bersifat dapat campur karena bercampur dalam semua pro...

 

Santo PausPius IUskup RomaLukisan abad ke-15 dari Paus Pius I karya Pietro PeruginoGerejaGereja KatolikAwal masa kepausanc. 140Akhir masa kepausanc. 154PendahuluHiginusPenerusAnisetusInformasi pribadiNama lahirPiusLahirc. akhir abad ke-1Aquileia, Kekaisaran RomawiWafatc. 154Roma, Kekaisaran RomawiOrang kudusHari heringatan11 JuliPaus lainnya yang bernama Pius Santo Paus Pius I, nama lahir Pius (???-154), adalah Paus Gereja Katolik Roma sejak tahun 140 hingga 154. Para ahli sejarah, mengkaitka...

 

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article's lead section may be too short to adequately summarize the key points. Please consider expanding the lead to provide an accessible overview of all important aspects of the article. (January 2010) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. ...

Mátyás Rákosi Assis, Mátyás Rákosi. Fonctions Président du Conseil des ministres de Hongrie 14 août 1952 – 4 juillet 1953(10 mois et 20 jours) Président István Dobi Prédécesseur István Dobi Successeur Imre Nagy Secrétaire général duParti des travailleurs hongrois 12 juin 1945 – 18 juillet 1956(8 ans, 1 mois et 6 jours) Prédécesseur Poste créé Successeur Ernő Gerő Biographie Date de naissance 9 mars 1892 Lieu de naissance Ada, Autriche-Hongri...

 

Questa voce o sezione tratta di una competizione calcistica in corso. Le informazioni possono pertanto cambiare rapidamente con il progredire degli eventi. Se vuoi scrivere un articolo giornalistico sull'argomento, puoi farlo su Wikinotizie. Non aggiungere speculazioni alla voce. Voce principale: Serie D 2023-2024. Questa voce raccoglie un approfondimento sui gironi D, E ed F dell'edizione 2023-2024 della Serie D. Indice 1 Girone D 1.1 Squadre partecipanti 1.2 Classifica 1.3 Risultati 1.3.1 ...

 

ХристианствоБиблия Ветхий Завет Новый Завет Евангелие Десять заповедей Нагорная проповедь Апокрифы Бог, Троица Бог Отец Иисус Христос Святой Дух История христианства Апостолы Хронология христианства Раннее христианство Гностическое христианство Вселенские соборы Н...

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: コルク – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年4月) コルクを打ち抜いて作った瓶の栓 コルク(木栓、�...

 

Small nucleolar RNA SNORD66Predicted secondary structure and sequence conservation of SNORD66IdentifiersSymbolSNORD66Alt. SymbolssnoHBII-142RfamRF00572Other dataRNA typeGene; snRNA; snoRNA; C/D-boxDomain(s)EukaryotaGOGO:0006396 GO:0005730SOSO:0000593PDB structuresPDBe In molecular biology, SNORD66 (also known as HBII-142) is a non-coding RNA (ncRNA) molecule which functions in the modification of other small nuclear RNAs (snRNAs). This type of modifying RNA is usually located in the nucleolus...

 

Pemilihan Umum Bupati Indragiri Hulu 2020201520249 Desember 2020[1]Kandidat Peta persebaran suara Peta Riau yang menyoroti Kabupaten Indragiri Hulu Bupati dan Wakil Bupati petahanaYopi Arianto danKhairizal Partai Golongan Karya Bupati dan Wakil Bupati terpilih Rezita Meylani dan Junaidi Rachmat Pemilihan Umum Bupati Indragiri Hulu 2020 akan dilaksanakan pada 9 Desember 2020 untuk memilih Bupati Indragiri Hulu periode 2021-2024. Bupati petahana, Yopi Arianto tidak dapat mencalonkan di...

Голубянки Самец голубянки икар Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ПервичноротыеБез ранга:ЛиняющиеБез ранга:PanarthropodaТип:ЧленистоногиеПодтип:ТрахейнодышащиеНадкласс:ШестиногиеКласс...

 

1965 single by Elvis PresleyYou'll Be Gone1965 U.S. RCA Victor 45 picture sleeve, 47-8500Single by Elvis Presleyfrom the album Girl Happy A-sideDo the ClamReleasedFebruary 9, 1965RecordedMarch 18, 1962GenrePoprock and rollLength2:20LabelRCA VictorSongwriter(s)Elvis PresleyRed WestCharlie HodgeElvis Presley singles chronology Blue Christmas (1965) Do the Clam / You'll Be Gone (1965) Crying in the Chapel (1965) You'll Be Gone is a song recorded by Elvis Presley and published by Elvis Presley Mu...

 

For Netflix original series and related specials, see List of Netflix original programming. For Netflix original stand-up comedy specials, see List of Netflix original stand-up comedy specials. For Netflix exclusive international distribution films, see Lists of Netflix exclusive international distribution programming. Netflix is an American global on-demand Internet streaming media provider, that has distributed a number of original programs, including original series, specials, miniseries,...

Term for American geopolitical dominance For other uses, see American Century (disambiguation). Flag of The United States of America The American Century[1][2] is a characterization of the period since the middle of the 20th century as being largely dominated by the United States in political, economic, and cultural terms. It is comparable to the description of the period 1815–1914 as Britain's Imperial Century.[3] The United States' influence grew throughout the 20t...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (مارس 2016) وحدات من الجيش المصري تعبر قناة السويس.عيد تحرير سيناء عيد تحرير سيناء اليوم الموافق 25 أبريل من كل سنه، وهو ...

 

Flag carrier of Iraq This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Iraqi Airways – news · newspapers · books · scholar · JSTOR (February 2019) (Learn how and when to remove this message) Iraqi Airways IATA ICAO Callsign IA IAW IRAQI FoundedJune 1945; 79 years ago (1945-06)Baghdad, Ir...

العلاقات النيجرية التشادية النيجر تشاد   النيجر   تشاد تعديل مصدري - تعديل   العلاقات النيجرية التشادية هي العلاقات الثنائية التي تجمع بين النيجر وتشاد.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة النيجر تشا...

 

European orbiter sent to study a comet RosettaArtist's illustration of RosettaMission typeComet orbiter/landerOperatorESACOSPAR ID2004-006A SATCAT no.28169Websiteesa.int/rosettaMission durationFinal: 12 years, 6 months, 28 days Spacecraft propertiesManufacturerAstriumLaunch massCombined: 3,000 kg (6,600 lb)Orbiter: 2,900 kg (6,400 lb)Lander: 100 kg (220 lb) [1]Dry massOrbiter: 1,230 kg (2,710 lb)Payload massOrb...