-Vijju
On 4/26/06, Mukul Gandhi <[EMAIL PROTECTED]> wrote:
I experimented with your suggestion 1. Following is the modified
function
public static void cross(List sets) throws Exception {
if (sets.size() == 2) {
FileWriter op1 = new FileWriter(" temp.txt");
FileWriter op2 = new FileWriter("out.txt");
for (int i = 0; i < ((Integer[])sets.get(0)).length; i++) {
for (int j = 0; j < ((Integer[])sets.get(1)).length; j++) {
op1.write((((Integer[])sets.get(0))[i]).toString());
op1.write(" "+(((Integer[])sets.get(1))[j]).toString());
op1.write("\n");
op2.write((((Integer[])sets.get(0))[i]).toString());
op2.write(" "+(((Integer[])sets.get(1))[j]).toString());
op2.write("\n");
}
}
op1.close();
op2.close();
}
else {
cross(sets.subList (0, sets.size() - 1));
Integer[] x = (Integer[])sets.get(sets.size() - 1);
BufferedReader temp = new BufferedReader(new FileReader("out.txt"));
FileWriter ot = new FileWriter("temp.txt ");
String l = "";
while ((l = temp.readLine()) != null) {
ot.write(l+"\n");
}
temp.close();
ot.close();
BufferedReader in = new BufferedReader(new FileReader(" temp.txt"));
FileWriter out = new FileWriter("out.txt");
String line = "";
while ((line = in.readLine()) != null) {
for (int j = 0; j < x.length; j++) {
StringTokenizer st = new StringTokenizer(line," ");
while (st.hasMoreTokens()) {
out.write(st.nextToken()+" ");
}
out.write(x[j].toString()+"\n");
}
}
in.close();
out.close();
}
}
Now I don't get OutOfMemoryError error. The method works. I tested with
14 sets, and each set had 5 elements. The resulting file size (out.txt)
is of size 6 GB. The swapping between out.txt and temp.txt takes long
time. The total time taken by the program was about 3 hours.
I am not happy with the output file size and the execution time.
Ideally, I want a solution like your suggestion 2. I just want to
iterate the cartesian product and don't store it anywhere.
I'll be happy if someone could suggest such an algorithm.
Regards,
Mukul
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/algogeeks
-~----------~----~----~----~------~----~------~--~---