Unterteilen Sie eine Sammlung in "k" nahezu gleiche Teile (Scala, aber sprachunabhängig)
Vor diesem Codeblock definiert:
dataset
kann sein aVector
oderList
numberOfSlices
ist einInt
Gibt an, wie oft das Dataset geschnitten werden sollIch möchte den Datensatz aufteilennumberOfSlices
Scheiben, möglichst gleichmäßig verteilt. Mit "Teilen" meine ich "Partition" (Schnittmenge von allen sollte leer sein, Vereinigung von allen sollte das Original sein), um den Begriff der Mengenlehre zu verwenden, obwohl dies nicht unbedingt eine Menge ist, sondern nur eine willkürliche Sammlung.
z.B.
dataset = List(1, 2, 3, 4, 5, 6, 7)
numberOfSlices = 3
slices == ListBuffer(Vector(1, 2), Vector(3, 4), Vector(5, 6, 7))
Gibt es einen besseren Weg, als den, den ich unten habe? (von dem ich nicht mal sicher bin, ob es optimal ist ...) Oder ist dies vielleicht kein algorithmisch machbares Unterfangen, in welchem Fall eine bekannte gute Heuristik?
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
}