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