Algorithm Questions
- To: mathgroup at smc.vnet.net
- Subject: [mg29386] Algorithm Questions
- From: "Hu Zhe" <huzhe at public3.sta.net.cn>
- Date: Sat, 16 Jun 2001 02:47:57 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi, I am wondering that if Mathematica has lazy-evaluation features. Say I am going to extract 100 lists from the permutation lists of {1, 2,...,100} (Permutation[Range[100]]) randomly. If I program like this: largeList = Permutation[Range[100]]; indx = Table[Random[Integer, {1, 100!}], {100}]; Part[largeList, indx] the program is very slow, since it works out all the 100! elements for the largeList, while I only need 100 items from it. Can I program like this ? Say, take 100 (somePermutationFunction 100) so that the permutation stops after 100 lists were taken. (I learned that it's called lazy-evaluation from Haskell.) The second question is that: I want the 100 lists randomly taken to be all different. So I program this way: While[Length[a] != 100, a = (Table[Random[Integer, {1, n!}], {100}] // Union)]; there must be more efficient solutions, especially to combine the solution with the first question? So my slow program is like this, deeply welcome suggestions to improve it: randomList[n_, k_] := Module[{a}, While[Length[a] != k, a = (Table[Random[Integer, {1, n!}], {k}] // Union)]; Part[Permutations[Range[n]], a]] Sincerely, Hu Zhe