Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #U is universal set (usually 1:n)
  2. #n - number of desired subsets
  3. #minSize = minimum subset size
  4. #maxSize = maximum subset size (last set can be an exception)
  5. generateSubsets <- function(U, n, minSize = 1, maxSize = sqrt(length(U))){
  6. Subsets <- list()
  7. leftovers <- U
  8. for(i in 1:(n-1)){
  9. items <- sample(1:length(U), sample(minSize:maxSize,1))
  10. Subsets[[i]] <- U[items]
  11. indexes <- which(leftovers %in% U[items])
  12. if(length(indexes) != 0){
  13. leftovers <- leftovers[-which(leftovers %in% U[items])]
  14. }
  15. }
  16. if(length(leftovers) == 0){
  17. items <- sample(1:length(U), sample(minSize:maxSize,1))
  18. Subsets[[n]] <- U[items]
  19. }else{
  20. #Add all remaning elements if needed
  21. Subsets[[n]] <- leftovers
  22. if(length(Subsets[[n]]) < maxSize) {
  23. candidates <- U[-which(Subsets[[n]] %in% U)]
  24. items <- sample(1:length(candidates), sample(1:(maxSize-length(Subsets[[n]])), 1))
  25. Subsets[[n]] <- c(Subsets[[n]], candidates[items])
  26. }
  27. }
  28. Subsets
  29. }
  30.  
  31. #Test
  32. a <- generateSubsets(1:10, 7, 3, 5)
  33. a
  34.  
  35.  
  36. SCPgreedy <- function(U, S) {
  37. N <- length(U); M <- length(S)
  38. count <- 0; visit <- integer(N)
  39. solution <- list()
  40.  
  41. while (count < N) {
  42. best <- 1e9; idx <- -1
  43.  
  44. for (i in 1 : M) {
  45. s <- S[[i]]
  46.  
  47. used <- 0
  48. for (x in s)
  49. if (visit[x] > 0)
  50. used <- used + 1
  51.  
  52. cost <- length(s) / (length(s) - used)
  53.  
  54. if (cost < best) {
  55. best <- cost
  56. idx <- i
  57. }
  58. }
  59.  
  60. s <- S[[idx]]
  61. for (x in s)
  62. visit[x] <- 1
  63.  
  64.  
  65. }
  66. }
  67.  
  68. SCPgreedy(1 : 10, a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement