簡體   English   中英

將自然數分配到等堆的算法

[英]Algorithms for distributing natural numbers in to equal piles

我正在尋找一種可以接收一組自然數的算法,例如:

S = {1, 3, 4, 2, 9, 34, 432, 43}

然后將它們分成盡可能相等的堆。 樁的數量預定義為 n。

目標是使每堆與最低堆之間的差異之和最小。

這里有一個例子。

假設你有:

S = { 1, 2, 2, 3, 1, 2, 3 }
n = 3

那么一個解決方案可能是

N1 = { 1, 2 }
N2 = { 2, 3 }
N3 = { 1, 2, 3 }

這些樁的總和將是 3、5 和 6。錯誤將是:(5 - 3) + (6 - 3) = 5。

該算法需要找到具有最低誤差的解決方案。

任何幫助表示贊賞。 如果有什么不清楚的,請發表評論。

這聽起來像是https://en.m.wikipedia.org/wiki/Bin_packing_problem的變體。 然而,沒有給出箱子的大小,因此它至少和裝箱一樣困難。 因此這個問題是 NP 難的。

例如,對於近似解決方案,您可以計算平均箱大小並執行首次擬合或最佳擬合的調整,以允許小的過度包裝。

我認為沒有有效的方法來解決這個問題,因為它是一個 NP-hard 問題。

證明:

讓我們將您提出的問題表示為 P*,

我們可以通過執行以下操作將分區問題(已知的 NP-hard)簡化為 P* 給定一個任意的分區問題 P1,我們要求解決 P* 的黑盒解決 N=2 的 P1(即,將集合划分為 2使差異最小化的堆)。

如果黑盒返回的差值為零,-> P1 有解

如果黑盒返回的差值不為零,-> P1 無解

因此,P* 是 NP-hard

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM