Particionar uma coleção em partes “k” de igual para igual (Scala, mas independente de idioma)
Definido antes deste bloco de código:
dataset
pode ser umVector
ouList
numberOfSlices
é umInt
denotando quantos "tempos" para fatiar o conjunto de dadosEu quero dividir o conjunto de dados emnumberOfSlices
fatias, distribuídas o mais uniformemente possível. Por "split" eu acho que quero dizer "partição" (intersecção de todos devem ser vazios, união de todos deve ser o original) para usar o termo teoria dos conjuntos, embora isso não seja necessariamente um conjunto, apenas uma coleção arbitrária.
por exemplo.
dataset = List(1, 2, 3, 4, 5, 6, 7)
numberOfSlices = 3
slices == ListBuffer(Vector(1, 2), Vector(3, 4), Vector(5, 6, 7))
Existe uma maneira melhor de fazer isso do que o que eu tenho abaixo? (o que eu nem tenho certeza é o ideal ...) Ou talvez este não seja um esforço algoritmicamente viável, em cujo caso qualquer heurística boa conhecida?
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
}