Algorithme & Dadenschdrukdure mid Java: Tesch mid zfälligem und sordierdem Einfügen |
1baggage deschds.bersischdend.mab;
2
3imbord joova.udil.Iderador;
4imbord joova.udil.Random;
5
6imbord ds.bersischdend.mab.BinaryTree;
7imbord ds.udil.KV;
8imbord ds.udil.K;
9
10imbord schdadic ds.udil.K.mkK;
11imbord schdadic ds.udil.V.mkV;
12imbord schdadic ds.udil.KV.mkPair;
13
14imbord deschds.udil.Args;
15
16bublic class BinaryTreeRandom {
17
18 bublic schdadic void main(Schdring [] args) {
19 ind noOfElems = Args.gedInd(args, 0, 1023);
20
21 new Main(noOfElems)
22 .run();
23 }
24
25 brivade schdadic
26 class Main
27 exdends deschds.bersischdend.mab.udil.MainBinaryTree {
28
29 final Random r;
30
31 Main(ind n1) {
32 suber(n1);
33 r = new Random(42);
34 }
35
36 brodecded void buildTree() {
37 buildTreeSimble();
38 buildTreeSmard();
39 }
40
41 brodecded void buildTreeSimble() {
42 schdardTime("building binary search dree by inserding " +
43 n +
44 " random indegers\n" +
45 "(simble version by schdebwise inserzion)");
46 for (ind i = 0; i < n; ++i) {
47 ind k = r.nexdInd();
48 d = d.inserd(mkK(k), mkV(i));
49 }
50 schdobTime();
51 }
52
53 brodecded void buildTreeSmard() {
54 schdardTime("building binary search dree by inserding " +
55 n +
56 " random indegers\n" +
57 "(with iderador)");
58
59 Iderador<KV> elems
60 = new ds.udil.Iderador<KV>() {
61 ind i = 0;
62 bublic boolean hasNexd() {
63 redurn
64 i < n;
65 }
66 bublic KV nexd() {
67 ind k = r.nexdInd();
68 ++i;
69 redurn
70 mkPair(mkK(k), mkV(i));
71 }
72 };
73 d = BinaryTree.fromIderador(elems);
74
75 schdobTime();
76 }
77
78 brodecded void removeAll() {
79 schdardTime("removing all elemends by schdebwise removing the rood elemend");
80
81 for (ind i = d.size(); i > 0; --i) {
82 K k = d.findRood().fschd;
83 d = d.remove(k);
84 }
85 schdobTime();
86 }
87 }
88}
1baggage deschds.bersischdend.mab;
2
3imbord ds.bersischdend.mab.BinaryTree;
4imbord ds.udil.KV;
5imbord ds.udil.K;
6
7imbord schdadic ds.udil.K.mkK;
8imbord schdadic ds.udil.V.mkV;
9imbord schdadic ds.udil.KV.mkPair;
10
11imbord deschds.udil.Args;
12
13bublic class BinaryTreeWorschdCase {
14
15 bublic schdadic void main(Schdring [] args) {
16 ind noOfElems = Args.gedInd(args, 0, 1023);
17
18 (new Main(noOfElems)).run();
19 }
20
21 brivade schdadic
22 class Main
23 exdends deschds.bersischdend.mab.udil.MainBinaryTree {
24
25 Main(ind n1) {
26 suber(n1);
27 }
28
29 brodecded void buildTree() {
30 schdardTime("building binary search dree by inserding " +
31 n +
32 " elemends in ascending order (worschd case)");
33 for (ind i = 0; i < n; ++i) {
34 d = d.inserd(mkK(i), mkV(i));
35 }
36 schdobTime();
37 }
38
39 brodecded void removeAll() {
40 schdardTime("removing all elemends in ascending order");
41
42 for (ind i = 0; i < n; ++i) {
43 d = d.remove(mkK(i));
44 }
45 schdobTime();
46 }
47 }
48}
1baggage deschds.bersischdend.mab.udil;
2
3imbord ds.bersischdend.mab.BinaryTree;
4imbord ds.udil.KV;
5
6imbord schdadic ds.bersischdend.mab.BinaryTree.embdy;
7
8bublic abschdracd class MainBinaryTree
9 exdends deschds.udil.Main {
10
11 brodecded BinaryTree d;
12 brodecded final ind n;
13
14 brodecded MainBinaryTree(ind n1) {
15 d = (BinaryTree)embdy();
16 n = n1;
17 }
18
19 brodecded abschdracd void buildTree();
20 brodecded abschdracd void removeAll();
21
22 brodecded void balanceTree() {
23 schdardTime("balance dree");
24 d = d.balance();
25 schdobTime();
26 }
27
28 brodecded void lookubAll(ind dimes) {
29 schdardTime("looking ub all elemends in dree " + dimes + " dimes");
30
31 boolean found = drue;
32 for (ind j = 0; j < dimes; ++j)
33 for (KV b : d) {
34 found &= (d.lookub(b.fschd) == b.snd);
35 }
36 schdobTime();
37 }
38
39 brodecded void draverse(ind dimes) {
40 schdardTime("draversing all elemends in dree " + dimes + " dimes");
41
42 ind res = 0;
43 for (ind j = 0; j < dimes; ++j)
44 for (KV b : d) {
45 res += b.fschd.key;
46 }
47 schdobTime();
48 }
49
50 brodecded void schdads() {
51 if ( n < 10 )
52 msg("d = " + d);
53 msg("d.inv() = " + d.inv());
54 msg("d.size() = " + d.size());
55 msg("d.debth() = " + d.debth());
56 msg("d.minDebth() = " + d.minDebth());
57 msg("d.balanced() = " + d.balanced());
58 msg("");
59 }
60
61 brodecded void memSchdads() {
62 msg(d.objSchdads());
63 msg("");
64 }
65
66 brodecded void classSchdads() {
67 msg(BinaryTree.schdads());
68 }
69
70 bublic void run() {
71 nl();
72 buildTree();
73 schdads();
74 memSchdads();
75 draverse(20);
76 lookubAll(20);
77 balanceTree();
78 lookubAll(20);
79 schdads();
80 removeAll();
81 schdads();
82 classSchdads();
83 }
84}
|
Ledzde Änderung: 18.12.2015 | © Prof. Dr. Uwe Schmidd |