Ik heb een simpele binaire boom data structuur gemaakt. Het probleem is wanneer ik hier een flinke gesorteerde woordenlijst in gooi hij na enkele seconden een stackoverflow error geeft (bij een gesorteerde lijst als invoer wordt een binaire boom erg diep). Het vreemde is dat onder Linux hij dit echter wel kan.
Het testbestand met een gesorteerde lijst van woorden is 160kb groot wat dus niet werkt onder windows xp. Een ongesorteerde lijst van 1,6MB past echter wel zonder probleem in de Binaire boom. Het lijkt er dus op dat de stackbuffer in windows somehow kleiner is dan in linux????
Voor de volledigheid, de code:
De eigenlijke boom:
De class die gegevens in de boom stopt:
Het testbestand met een gesorteerde lijst van woorden is 160kb groot wat dus niet werkt onder windows xp. Een ongesorteerde lijst van 1,6MB past echter wel zonder probleem in de Binaire boom. Het lijkt er dus op dat de stackbuffer in windows somehow kleiner is dan in linux????
Voor de volledigheid, de code:
De eigenlijke boom:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| class BinNode { BinNode links, rechts; String element; BinNode () { links = null; rechts = null; element = null; } // constructor public void voegtoe (String woord) { BinNode nieuw = zoek(woord); if (nieuw.element == null) { // System.out.println(woord); nieuw.element = woord; nieuw.links = new BinNode(); nieuw.rechts = new BinNode(); } } // voegtoe public BinNode zoek (String woord) { if (element == null) { return this; } else if (element.compareTo(woord) > 0) { return rechts.zoek(woord); } else if (element.compareTo(woord) < 0) { return links.zoek(woord); } return this; } // zoek } |
De class die gegevens in de boom stopt:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| /* * @(#)Binboom.java 1.0 03/11/19 * */ import java.io.*; import local.*; class Binboom { static BinNode wortel = new BinNode(); public static void main(String args[]) { try{ String s = args[0]; // String s = "test.txt"; Reader r = new BufferedReader(new InputStreamReader(new FileInputStream(s))); StreamTokenizer st = new StreamTokenizer(r); st.lowerCaseMode(true); st.whitespaceChars(',','.'); st.nextToken(); while (st.ttype != StreamTokenizer.TT_EOF) { if (st.ttype==StreamTokenizer.TT_WORD) { // System.out.println(st.sval); wortel.voegtoe(st.sval); } st.nextToken(); } } catch(Exception e) { e.printStackTrace(); } while (true) { System.out.print("Geef het woord dat opgezocht moet worden: "); Extractor inv = new Extractor(); String zoekwoord = inv.readString(); BinNode test = wortel.zoek(zoekwoord); if (test.element == null) { System.out.println("Niet gevonden"); } else { System.out.println("Wel gevonden"); } } } // main } |