Разбейте коллекцию на «к», близкие к равным части (Scala, но не зависит от языка)
Определено перед этим блоком кода:
dataset
can be a Vector
or List
numberOfSlices
is an Int
denoting how many "times" to slice dataset
Я хочу разбить набор данных на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
}