Определено перед этим блоком кода:
-
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
}