Defined trước khối mã này:phân vùng một bộ sưu tập thành "k" close-to-bằng mảnh (Scala, nhưng ngôn ngữ bất khả tri)
dataset
có thể là mộtVector
hoặcList
numberOfSlices
là mộtInt
biểu thị số lượng "thời gian" để chia tập dữ liệu
Tôi muốn chia tập dữ liệu thành numberOfSlices
lát, phân phối đồng đều nhất có thể. Bằng cách "phân chia", tôi đoán tôi có nghĩa là "phân vùng" (giao điểm của tất cả nên được sản phẩm nào, công đoàn của tất cả phải là bản gốc) để sử dụng các thuật ngữ tập lý ngữ, mặc dù điều này không nhất thiết phải là một tập hợp, chỉ cần một bộ sưu tập tùy ý.
ví dụ:
dataset = List(1, 2, 3, 4, 5, 6, 7)
numberOfSlices = 3
slices == ListBuffer(Vector(1, 2), Vector(3, 4), Vector(5, 6, 7))
Có cách nào tốt hơn để làm điều đó hơn những gì tôi có bên dưới không? (mà tôi thậm chí không chắc chắn là tối ưu ...) Hoặc có lẽ đây không phải là một nỗ lực khả thi về mặt thuật toán, trong trường hợp nào có bất kỳ chẩn đoán tốt nào được biết đến?
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
}
Tôi không chắc chắn cách diễn giải "được phân phối đồng đều nhất có thể". Đi theo mã của bạn, 'Seq: grouped (Int)' đã làm những gì bạn muốn, ngoại trừ việc nó không bao giờ vượt quá kích thước slice. – Kaito
Có vẻ như 'nhóm 'sẽ chia thành các nhóm" x "trong khi tôi muốn chia một bộ sưu tập thành các nhóm" x ". Tôi đã thử nó trong thư trả lời, 'List (1, 2, 3, 4, 5) .grouped (2) .toList' cung cấp cho' List (List (1, 2), List (3, 4), List (5)) 'trong khi tôi muốn một cái gì đó như' Danh sách (Danh sách (1, 2), Danh sách (3, 4, 5)) '. – adelbertc