Разбейте коллекцию на «к», близкие к равным части (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
}

Ответы на вопрос(5)

Ваш ответ на вопрос