(* In this scripte, we will write a function to generate all the subset of {1,2,...,n} * The basic idea is to use the bit array of 1, 2, ..., n to represent the subset. *) let rec int_power x n = let xf = float_of_int x and nf = float_of_int n in int_of_float (xf ** nf) ;; let generate_subset n = let arr = Array.init n (fun x -> x + 1)in let rec generate_set result index k = match k with | 0 -> result | k -> if k land 1 = 1 then let elem = arr.(index) in generate_set (elem::result) (index + 1) (k lsr 1) else generate_set result (index + 1) (k lsr 1) in let rec generate_allset result k limit = match k < limit with | false -> result | true -> let res = generate_set [] 0 k in generate_allset (res::result) (k + 1) limit in let num_iter = int_power 2 n in let final_result = generate_allset [] 0 num_iter in final_result ;; generate_subset 1 ;; generate_subset 2 ;; generate_subset 3 ;; generate_subset 4 ;;
Thursday, February 5, 2015
Generate All Subsets of N
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment