Giả sử chúng ta có một ma trận 5x5, chứa đầy 0.
myMatrix <- matrix(rep(0, 25), ncol = 5)
Bây giờ, hãy chọn một bộ ba số nguyên từ 1 đến 5.
triplet <- c(1,2,3)
Đối với tất cả các kết hợp của bộ ba này, bây giờ chúng ta thêm 1 trong ma trận, với chức năng này:
addCombinationsToMatrix <- function(.matrix, .triplet){
indexesToChange <- as.matrix(expand.grid(.triplet, .triplet))
.matrix[indexesToChange] <- .matrix[indexesToChange] + 1
.matrix
}
Sử dụng chức năng, chúng tôi đi từ
myMatrix
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
đến
myMatrix <- addCombinationsToMatrix(myMatrix, triplet)
myMatrix
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 0 0
[2,] 1 1 1 0 0
[3,] 1 1 1 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
Nếu chúng tôi chọn một bộ ba khác, chúng tôi chuyển sang
nextTriplet <- 2:4
myMatrix <- addCombinationsToMatrix(myMatrix, nextTriplet)
myMatrix
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 0 0
[2,] 1 2 2 1 0
[3,] 1 2 2 1 0
[4,] 0 1 1 1 0
[5,] 0 0 0 0 0
Vì vậy, các kết hợp cột hàng biểu thị tần suất hai số nguyên được hiển thị cùng nhau trong một bộ ba: 3 và 4 đã được hiển thị cùng nhau một lần, 2 và 3 đã được hiển thị cùng nhau hai lần.
Câu hỏi : Làm thế nào một người có thể chọn bộ ba, sao cho mọi kết hợp (1-2, 1-3, 1-4 ...) được chọn ít nhất một lần và số lượng bộ ba được giảm thiểu.
Tôi đang tìm kiếm một thuật toán ở đây chọn bộ ba tiếp theo.
Lý tưởng nhất là nó có thể được mở rộng đến
- ma trận lớn tùy ý (10 x 10, 100x100 ...)
- các vectơ lớn tùy ý (bộ tứ, bộ ngũ, n-tuplets)
- một số lần tùy ý một sự kết hợp phải được chọn ít nhất
Thí dụ:
myMatrix
myMatrix <- addCombinationsToMatrix(myMatrix, 1:3)
myMatrix
myMatrix <- addCombinationsToMatrix(myMatrix, 3:5)
myMatrix
myMatrix <- addCombinationsToMatrix(myMatrix, c(1,4,5))
myMatrix
myMatrix <- addCombinationsToMatrix(myMatrix, c(2,4,5))
myMatrix
EDIT : Chỉ cần chắc chắn: câu trả lời không nhất thiết phải là R
mã. Nó có thể là một số ngôn ngữ khác cũng như hoặc thậm chí mã giả.
EDIT 2 : Điều này xảy ra với tôi bây giờ, rằng có nhiều cách đo lường hiệu quả khác nhau. Tôi thực sự có nghĩa là, thuật toán nên mất càng ít lần lặp càng tốt. Thuật toán nhanh cũng rất tuyệt, nhưng không phải là mục tiêu chính ở đây.