Skip to content

Commit 1eccbb2

Browse files
Stopp etter n-1 noder - fjernet død kode - alle edges i liste
1 parent ed57a11 commit 1eccbb2

17 files changed

+145
-1064
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Heap/.idea/workspace.xml
2+
219Workspace.code-workspace

Heap/.idea/workspace.xml

Lines changed: 41 additions & 46 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Heap/index.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
<script src="js/Controller.js"></script>
1414
<script src="js/View.js"></script>
1515
<script src="js/EventManager.js"></script>
16-
<script src="js/State.js"></script>
17-
<script src="js/StateController.js"></script>
1816
<script src="js/MaxHeap.js"></script>
1917
<script src="js/MaxHeapFree.js"></script>
2018
<script src="js/BuildHeap.js"></script>
@@ -73,9 +71,9 @@ <h1 id="headerText">Heap Datastructure</h1>
7371
<button id="reset" class="btn btn-primary"
7472
onclick="viewer.switchAlgorithm(control.getAlgorithm().getName());">Reset
7573
</button>
76-
<button id="backward" class="btn btn-primary" onclick="stepBack();">Backward</button>
74+
<button id="backward" class="btn btn-primary" onclick="viewer.stepBack();">Backward</button>
7775
<button id="forward" class="btn btn-primary"
78-
onclick="viewer.stepForward(getGraphState(), getArrayState());">Forward
76+
onclick="viewer.stepForward();">Forward
7977
</button>
8078
<button id="play" class="btn btn-primary" onclick="viewer.play()">Play</button>
8179
</div>

Heap/js/View.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,16 @@ class View implements IView {
217217
}
218218

219219
setSlow() {
220-
this.animSpeed = 250;
221220
manager.delayTime = 900;
222221
this.restartManager();
223222
}
224223

225224
setMedium() {
226-
this.animSpeed = 600;
227225
manager.delayTime = 600;
228226
this.restartManager();
229227
}
230228

231229
setFast() {
232-
this.animSpeed = 300;
233230
manager.delayTime = 300;
234231
this.restartManager();
235232
}

Kruskal/js/Controller.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ var Controller = /** @class */ (function () {
5555
Controller.prototype.addWeightToSum = function (weight) {
5656
viewer.addWeightToSum(weight);
5757
};
58+
Controller.prototype.excludeEdges = function (edgeList) {
59+
viewer.excludeEdges(edgeList);
60+
};
5861
return Controller;
5962
}());
6063
var controller = new Controller();

Kruskal/js/Controller.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class Controller {
4848

4949
deselectTwoNodes(node1: number, node2: number){
5050
viewer.deselectTheseNodes(node1, node2);
51-
5251
}
5352

5453
disableStartButton() {
@@ -70,6 +69,10 @@ class Controller {
7069
addWeightToSum(weight: number) {
7170
viewer.addWeightToSum(weight);
7271
}
72+
73+
excludeEdges(edgeList : any) {
74+
viewer.excludeEdges(edgeList);
75+
}
7376
}
7477

7578
var controller: Controller = new Controller();

Kruskal/js/EventManager.js

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ var EventManager = /** @class */ (function () {
1515
return;
1616
}
1717
var event = this.nextEvents.shift();
18-
console.log(this.nextEvents);
1918
event.next();
2019
this.previousEvents.push(event);
2120
if (event.duration == 0)
@@ -26,7 +25,6 @@ var EventManager = /** @class */ (function () {
2625
if (this.previousEvents.length == 0)
2726
return;
2827
var event = this.previousEvents.pop();
29-
//this.delayTime = 0; //TODO: Should there be a delay when stepping backwards?
3028
event.previous();
3129
this.nextEvents.unshift(event);
3230
};
@@ -54,15 +52,3 @@ var FrontendEvent = /** @class */ (function () {
5452
return FrontendEvent;
5553
}());
5654
var manager = new EventManager();
57-
/*
58-
/** How to add FrontendEvents to manager
59-
for(var i=0; i<10; i++) {
60-
var f = function(k) {
61-
return function() {console.log("Going forward, step " + k);};
62-
}(i);
63-
var b = function(k) {
64-
return function() {console.log("Going backward, step " + k);}
65-
}(i);
66-
manager.addEvent(new FrontendEvent(f,b));
67-
}
68-
*/

Kruskal/js/EventManager.ts

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
*/
55

6-
declare var $ : any;
6+
declare var $: any;
77

88
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
99
class EventManager {
@@ -18,7 +18,6 @@ class EventManager {
1818
return;
1919
}
2020
var event = (<FrontendEvent>this.nextEvents.shift());
21-
console.log(this.nextEvents);
2221
event.next();
2322
this.previousEvents.push(event);
2423
if (event.duration == 0)
@@ -30,7 +29,6 @@ class EventManager {
3029
if (this.previousEvents.length == 0)
3130
return;
3231
var event: FrontendEvent = (<FrontendEvent>this.previousEvents.pop());
33-
//this.delayTime = 0; //TODO: Should there be a delay when stepping backwards?
3432
event.previous();
3533
this.nextEvents.unshift(event);
3634
}
@@ -53,27 +51,14 @@ class EventManager {
5351
}
5452

5553
class FrontendEvent {
56-
next : Function;
57-
previous : Function;
58-
duration:number;
59-
constructor(n : Function, p : Function, d:number) {
54+
next: Function;
55+
previous: Function;
56+
duration: number;
57+
constructor(n: Function, p: Function, d: number) {
6058
this.next = n;
6159
this.previous = p;
6260
this.duration = d;
6361
}
6462
}
6563

66-
var manager:EventManager = new EventManager();
67-
68-
/*
69-
/** How to add FrontendEvents to manager
70-
for(var i=0; i<10; i++) {
71-
var f = function(k) {
72-
return function() {console.log("Going forward, step " + k);};
73-
}(i);
74-
var b = function(k) {
75-
return function() {console.log("Going backward, step " + k);}
76-
}(i);
77-
manager.addEvent(new FrontendEvent(f,b));
78-
}
79-
*/
64+
var manager: EventManager = new EventManager();

Kruskal/js/KruskalAlgorithm.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
///<reference path="Controller.ts"/>
66
///<reference path="EventManager.ts"/>
77
///<reference path="View.ts"/>
8+
///<reference path="methods.ts"/>
89
var arr = [];
910
var queue = [];
1011
var currentEdge = 0;
@@ -13,34 +14,36 @@ function startKruskal() {
1314
var edgeList = sortEdges();
1415
for (var i = 0; i < edgeList.length; i++) {
1516
arr[i] = i;
17+
var _a = edgeList[edgeList.length - 1 - i], node1 = _a[0], node2 = _a[1], weight = _a[2];
18+
currentEdge = getEdgeId(node1, node2);
19+
writeEdge(currentEdge, node1, node2, weight);
1620
}
1721
var sum = 0;
1822
var j = 0;
1923
while (edgeList.length > 0) {
20-
var _a = edgeList.pop(), node1 = _a[0], node2 = _a[1], weight = _a[2];
24+
// Optimization -> Stop algorithm after n-1 edges are in the MST
25+
if (j >= nodes - 1) {
26+
controller.excludeEdges(edgeList);
27+
break;
28+
}
29+
var _b = edgeList.pop(), node1 = _b[0], node2 = _b[1], weight = _b[2];
2130
currentEdge = getEdgeId(node1, node2);
22-
writeEdge(currentEdge, node1, node2, weight);
23-
controller.selectTwoNodes(node1, node2);
24-
controller.highlightEdgeText(currentEdge);
25-
controller.highlightMyEdge(currentEdge);
26-
console.log("Edge: " + currentEdge);
2731
if (connected(node1, node2) == false) {
32+
controller.selectTwoNodes(node1, node2);
33+
controller.highlightEdgeText(currentEdge);
34+
controller.highlightMyEdge(currentEdge);
2835
union(node1, node2);
2936
sum = sum + weight;
3037
controller.addWeightToSum(sum);
38+
j++;
3139
}
3240
else {
3341
controller.dehighlightMyEdge(currentEdge);
3442
controller.transparentMyEdge(currentEdge);
3543
controller.excludeEdgeText(currentEdge);
3644
}
3745
controller.deselectTwoNodes(node1, node2);
38-
j++;
3946
}
40-
/*
41-
swapTwoElements(0, 1);
42-
swapTwoElements(1,2);
43-
*/
4447
arr = [];
4548
queue = [];
4649
currentEdge = 0;
@@ -69,8 +72,6 @@ function union(aIndex, bIndex) {
6972
function sortEdges() {
7073
var temp = 0;
7174
var sorted = triplets;
72-
console.log(triplets);
73-
console.log(sorted);
7475
if (sorted.length > 0) {
7576
for (var i = 0; i < sorted.length; i++) {
7677
for (var j = 0; j < sorted.length; j++) {

Kruskal/js/KruskalAlgorithm.ts

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,59 +6,58 @@
66
///<reference path="Controller.ts"/>
77
///<reference path="EventManager.ts"/>
88
///<reference path="View.ts"/>
9+
///<reference path="methods.ts"/>
910

1011
let arr: number[] = [];
11-
let queue: number [] = [];
12+
let queue: number[] = [];
1213
let currentEdge: number = 0;
1314

14-
15-
1615
function startKruskal() {
1716
controller.disableStartButton();
18-
1917
let edgeList = sortEdges();
2018

2119
for (let i = 0; i < edgeList.length; i++) {
2220
arr[i] = i;
21+
22+
let [node1, node2, weight] = edgeList[edgeList.length - 1 - i];
23+
currentEdge = getEdgeId(node1, node2);
24+
writeEdge(currentEdge, node1, node2, weight);
2325
}
2426

2527
let sum = 0;
2628
let j: number = 0;
2729

2830
while (edgeList.length > 0) {
29-
let [node1, node2, weight] = edgeList.pop();
31+
// Optimization -> Stop algorithm after n-1 edges are in the MST
32+
if (j >= nodes - 1) {
33+
controller.excludeEdges(edgeList);
34+
break;
35+
}
3036

37+
let [node1, node2, weight] = edgeList.pop();
3138
currentEdge = getEdgeId(node1, node2);
32-
writeEdge(currentEdge, node1, node2, weight);
33-
34-
controller.selectTwoNodes(node1, node2);
35-
controller.highlightEdgeText(currentEdge);
36-
controller.highlightMyEdge(currentEdge);
37-
console.log("Edge: " + currentEdge);
3839

3940
if (connected(node1, node2) == false) {
41+
controller.selectTwoNodes(node1, node2);
42+
controller.highlightEdgeText(currentEdge);
43+
controller.highlightMyEdge(currentEdge);
44+
4045
union(node1, node2);
4146
sum = sum + weight;
4247
controller.addWeightToSum(sum);
43-
}
44-
else {
48+
49+
j++;
50+
} else {
4551
controller.dehighlightMyEdge(currentEdge);
4652
controller.transparentMyEdge(currentEdge);
4753
controller.excludeEdgeText(currentEdge);
4854
}
4955
controller.deselectTwoNodes(node1, node2);
50-
j++;
5156
}
52-
/*
53-
swapTwoElements(0, 1);
54-
swapTwoElements(1,2);
55-
*/
56-
57-
5857
arr = [];
5958
queue = [];
6059
currentEdge = 0;
61-
60+
6261
controller.enableStartButtion();
6362
}
6463

@@ -72,7 +71,7 @@ function find(index: number) {
7271
return root;
7372
}
7473

75-
function connected(aIndex: number, bIndex: number){
74+
function connected(aIndex: number, bIndex: number) {
7675
let aRoot = find(aIndex);
7776
let bRoot = find(bIndex);
7877
let connected: boolean = (aRoot == bRoot);
@@ -92,8 +91,6 @@ function union(aIndex: number, bIndex: number) {
9291
function sortEdges() {
9392
let temp = 0;
9493
let sorted = triplets;
95-
console.log(triplets);
96-
console.log(sorted);
9794
if (sorted.length > 0) {
9895
for (var i = 0; i < sorted.length; i++) {
9996
for (var j = 0; j < sorted.length; j++) {

Kruskal/js/Methods.js

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,6 @@ var randomWeight = 0;
77
var nodes = 0;
88
var MAX_NODES = 10;
99
var edges = 0;
10-
/*
11-
function setOnClickListener () {
12-
$('#my_button').on('click', function(){
13-
console.log('Button clicked. Disabling...');
14-
$('#my_button').attr("disabled", true);
15-
});
16-
17-
console.log("assip");
18-
}
19-
20-
setOnClickListener();
21-
*/
2210
function highlightThisEdge(index) {
2311
$("#edge" + index).css({ "stroke": "rgb(16, 130, 219)", "stroke-width": "6" });
2412
}
@@ -66,12 +54,10 @@ function enableButton() {
6654
$("#start").css({ "opacity": 1 });
6755
}
6856
function numberOfNodes(value) {
69-
console.log("Value: " + value);
7057
viewer.resetAll();
7158
drawGraph(value);
7259
}
7360
function drawGraph(n) {
74-
console.log("number" + n);
7561
$("#edgeTable").empty();
7662
viewer.resetAll(); //Not working, button must reset
7763
switch (+n) {
@@ -128,8 +114,3 @@ function excludeEdgeText(i) {
128114
function higlightEdgeText(i) {
129115
$("#edgeContent" + i).css({ "color": "blue" });
130116
}
131-
function swapTwoElements(i, j) {
132-
var a = document.getElementById("edgeContent" + i);
133-
var b = document.getElementById("edgeContent" + j);
134-
a.parentNode.insertBefore(b, a);
135-
}

0 commit comments

Comments
 (0)