的代碼塊之前定義:分區的集合到「K」貼近等份(Scala中,但語言無關)
dataset
可以是Vector
或List
numberOfSlices
是Int
表示切片數據集有多少「次」
我想將數據集拆分爲numberOfSlices
切片,儘可能均勻分佈。通過「分裂」我想我的意思是「分區」(所有的交集應該是空的,所有的聯合應該是原始的)使用集合論的術語,儘管這不一定是一個集合,只是一個任意的集合。
例如
dataset = List(1, 2, 3, 4, 5, 6, 7)
numberOfSlices = 3
slices == ListBuffer(Vector(1, 2), Vector(3, 4), Vector(5, 6, 7))
有沒有更好的辦法做到這一點比我下面有什麼? (我甚至不確定是否最優...) 或者,這可能不是一個算法上可行的努力,在這種情況下,任何已知的好啓發式?
val slices = new ListBuffer[Vector[Int]]
val stepSize = dataset.length/numberOfSlices
var currentStep = 0
var looper = 0
while (looper != numberOfSlices) {
if (looper != numberOfSlices - 1) {
slices += dataset.slice(currentStep, currentStep + stepSize)
currentStep += stepSize
} else {
slices += dataset.slice(currentStep, dataset.length)
}
looper += 1
}
我不確定如何解釋「儘可能均勻分佈」。通過你的代碼,'Seq:分組(Int)'已經做了你想要的,除了它永遠不會超過片的大小。 – Kaito 2012-07-12 16:46:02
似乎「分組」將它分成「X」組,而我想將一個集合分成「X」組。我在回覆中試了一下,List(1,2,3,4,5).grouped(2).toList'給出了List(List(1,2),List(3,4),List(5) )''而我想要'List(List(1,2),List(3,4,5)''')。 – adelbertc 2012-07-12 17:23:45