2012-03-30 39 views
0

解決此問題的最佳算法是什麼?我在這個問題上花了幾個小時。但無法解決。對數值進行分類的算法

一個男人購買了一條項鍊,並計劃將它分成兩部分,每部分的平均亮度應該大於或等於原始部分。

用於將項鍊的標準是在珍珠的數目

1.差兩個珍珠之間套不應珍珠在原項鍊的數量或3取高者的大於10%。

2.兩個項鍊中珍珠數量的差異應該是最小的。

3.如果任何一條項鍊的平均亮度小於原始設置的平均亮度,則返回0作爲輸出。

4.兩個項鍊的平均亮度應該大於原來的兩個,兩塊的平均亮度之差最小。

5.每件的平均亮度應大於或等於原件。

+0

告訴我們你是如何測量「亮度」,因爲規範的計算平均值的方式將使分區的平均值的平均值無法大於平均值本身藝術比原來的平均水平高,另一部分必須低一些 - 也就是說,你必須把項鍊分成兩半,以達到你想要的結果。 – Kaganar 2012-03-30 20:15:44

+0

@Kaganar - 輸入值將是一組數字,例如 - {10,6,3,9,7,2,5,8,4,1},其中0≤亮度≤10。 – eler 2012-03-30 20:19:09

+0

你打算把這個分成兩部分,每部分的平均值等於或大於原始平均值? – Kaganar 2012-03-30 20:20:06

回答

0

這個問題很難有效地做到(在NP某處)。

假設你有一組平均值爲X。那就是,X = (x1 + x2 + ... + xn)/n

假設您將它分成平均分別爲ST的集合,其中st項目分別在每個集合中。

您可以用數學證明,如果平均的一個,ST,比X越大,其他兩個必須小於X

因此,兩組必須具有完全相同的亮度,因爲這是您的條件可滿足的唯一方法。

知道了這一點,你最後的sumset sum問題 - 你想找到一個子集,其總和恰好是整個集合的一半。這是一個衆所周知的難題。 (它已被歸類爲NP,好吧,它與子集和問題並不完全相同,但是如果從每個亮度值中減去全集的平均值,則解決子集和問題會給出答案。相反,看你如何解決你的問題的子集總和問題。)

因此,沒有快速的方法做到這一點 - 只有近似值或指數運行時間...但是,也許this將幫助。它提到更好運行時間如果你的權重(在你的情況下,亮度水平)是有界的

+0

感謝您的大力幫助。我會深入研究並讓你知道。 – eler 2012-03-30 20:46:23

+0

讓我簡單介紹一下我的理解。首先我們需要使用sumset sum來找到一個子集。然後從子集中的每個值中減去全集的平均值。我正朝着正確的方向嗎? – eler 2012-03-30 21:42:44

+0

對不起,延遲..和排序,但在其他順序..首先,從每個亮度水平減去平均,然後解決子集和問題。然後,無論什麼設置爲零是一半,其餘的是另一半。 (順便說一句,這兩個集合應該和爲零。) – Kaganar 2012-04-02 17:09:09

相關問題