2011-04-07 35 views
0

我試圖在多個部分(子列表)中切片列表(它稱爲輸入列表&它包含Java雙數據類型元素)。子列表的大小可以通過少量不相等的。每個部分(子列表)作爲另一個程序的輸入。輸入列表的大小是最大爲10,000的變量,即它可以小到1或2或3,大到100或10000或10000以下的任何數字。Java算法切片列表

什麼是最佳方式把這樣的列表分成多個部分?我一直在考慮Donald Knuth在3h + 1發行版中設計的貝殼類型差距。但是,我不確定這是否合適。感謝你的幫助。

謝謝!

+0

你想切片清單? – pajton 2011-04-07 17:00:42

+0

這實際上取決於你想要分割的條件 – RoflcoptrException 2011-04-07 17:04:01

+0

@java_pill - 你只是打算根據記錄數量來分割它嗎?或數據本身的一些標準?什麼決定了如何分割名單? – Jay 2011-04-07 17:16:58

回答

2

爲了擴大對答案M的最佳值,

假設有M.

然後你想最小化函數處理大小的列表相關的一些成本函數C

TotalCost = M * C(N/M)+開銷

其中開銷是分割列表的開銷。

我認爲對於大多數應用來說,不同的M值不會有太大的差異,所以沒有必要將它分開。

如果您有多個處理器,並且您可以將子列表交給另一個處理器,那麼這種情況很有用。在這種情況下,成本函數會更喜歡

TOTALCOST = C(N/M)+開銷如果M <數量的處理器

的,所以你應該選擇M至比數量接近但不處理器。

2

除非我誤解了這個問題,否則這很容易。

鑑於大小N,一個列表來創建中號子列表,其中M < N,

  1. 創建的大小K = N/M
    (四捨五入)
  2. 創建M-1列出的 尺寸M列表 - (M - 1)* K

然後

  1. 複製的第K個元素的 第一列表
  2. 複製下一K個元素的 第二列表,
  3. 等,
  4. 最後複製最後M - (M - 1)* K至 最後的名單。
+0

M的最佳值是多少?因爲N有所不同。或者你如何確定M的價值? – 2011-04-07 17:20:15

+0

M的最佳值取決於應用特性。處理大小爲N/M的N個列表與大小爲N的單個列表是否更便宜?如果是這樣,按什麼因素? – 2011-04-07 17:22:43