2011-04-07 107 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