Skip to content

Commit a4abf6d

Browse files
committed
array var overruns + mergesort polishing
1 parent e5e1824 commit a4abf6d

File tree

8 files changed

+36
-29
lines changed

8 files changed

+36
-29
lines changed

src/algorithms/controllers/MSDRadixSort.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ const STACK_FRAME_COLOR = {
3434
const VIS_VARIABLE_STRINGS = {
3535
i_left_index: 'i',
3636
j_right_index: 'j',
37-
i_eq_0: 'i==0',
38-
i_gt_n: 'i==n+1',
39-
j_eq_0: 'j==0',
40-
j_gt_n: 'j==n+1',
37+
i_eq_0: 'i=0',
38+
i_gt_n: 'i=n+1',
39+
j_eq_0: 'j=0',
40+
j_gt_n: 'j=n+1',
4141
left: 'left',
4242
right: 'right',
43-
right_eq_0: 'right==0'
43+
right_eq_0: 'right=0'
4444
};
4545

4646
const MSD_BOOKMARKS = {

src/algorithms/controllers/msort_arr_bup.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ export function run_msort() {
149149
// before loop exit
150150
/* eslint-disable no-constant-condition */
151151
while (true) {
152-
chunker.add('MergeAllWhile', () => {
153-
//no animation
152+
chunker.add('MergeAllWhile', (vis) => {
153+
assignVarToA(vis, 'right', undefined, size);
154154
}, []);
155155
if ((left + runlength) >= size)
156156
break;
@@ -338,9 +338,8 @@ export function run_msort() {
338338
chunker.add('left2', (vis, a, c_left, c_right, c_rlength) => {
339339
vis.array.set(a, 'msort_arr_bup'); //unhighlight array a
340340
set_simple_stack(vis.array, [`runlength = ${c_rlength}`]);
341-
342-
if (c_left < size) assignVarToA(vis, 'left', c_left, size);
343-
assignVarToA(vis, "right", c_right, size);
341+
assignVarToA(vis, 'left', c_left, size);
342+
assignVarToA(vis, 'right', c_right, size);
344343

345344
}, [A, left, right, runlength]);
346345

@@ -349,7 +348,8 @@ export function run_msort() {
349348
runlength = 2 * runlength;
350349

351350
chunker.add('mergeDone', (vis, c_rlength) => {
352-
assignVarToA(vis, "right", undefined, size);
351+
assignVarToA(vis, 'left', undefined, size);
352+
// assignVarToA(vis, 'right', undefined, size);
353353
highlightAllRunlengths(vis, c_rlength, runAColor, runBColor, size);
354354
}, [runlength])
355355

src/algorithms/controllers/msort_arr_nat.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ export function run_msort() {
158158
}, [left]);
159159

160160
do {
161-
chunker.add('MergeAllWhile', () => {
162-
// no animation
161+
chunker.add('MergeAllWhile', (vis) => {
162+
assignVarToA(vis, 'right', undefined, size);
163163
}, []);
164164

165165
// finding the first run, A[left..mid]
@@ -184,8 +184,8 @@ export function run_msort() {
184184
// finding the second run, A[mid+1..right]
185185
let right = mid + 1;
186186
chunker.add('right', (vis, c_right) => {
187+
assignVarToA(vis, 'right', c_right, size);
187188
if (right < size) {
188-
assignVarToA(vis, 'right', c_right, size);
189189
highlight(vis, c_right, runBColor);
190190
}
191191
}, [right]);
@@ -383,11 +383,9 @@ export function run_msort() {
383383
chunker.add('left2', (vis, a, c_left, c_right, c_rcount) => {
384384
vis.array.set(a, 'msort_arr_nat'); // unhighlight array a
385385
set_simple_stack(vis.array, [`runcount = ${c_rcount}`]);
386-
if (c_left < size) {
387-
assignVarToA(vis, 'left', c_left, size);
388-
assignVarToA(vis, "right", c_right, size);
389-
}
390-
// assignVarToA(vis, "size", size, size);
386+
assignVarToA(vis, 'left', c_left, size);
387+
assignVarToA(vis, 'right', c_right, size);
388+
// assignVarToA(vis, 'size', size-1, size);
391389

392390

393391
}, [A, left, right, runcount]);
@@ -396,6 +394,8 @@ export function run_msort() {
396394

397395
chunker.add('mergeDone', (vis, a) => {
398396
highlightNaturalRuns(vis, a, runAColor, runBColor);
397+
assignVarToA(vis, 'left', undefined, size);
398+
assignVarToA(vis, 'right', undefined, size);
399399
}, [A])
400400

401401
} while (runcount > 1);

src/algorithms/controllers/msort_arr_td.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,11 @@ export function run_msort() {
346346
else
347347
highlight(vis, i, runBColor);
348348
}
349-
if (cur_ap2 < a.length) { // XXX
349+
if (cur_ap2 < a.length) { // can't render beyond array:(
350350
assignVarToA(vis, 'ap2', cur_ap2);
351+
assignVarToA(vis, 'ap2='+(a.length+1), undefined);
351352
} else {
353+
assignVarToA(vis, 'ap2='+(a.length+1), a.length - 1);
352354
assignVarToA(vis, 'ap2', undefined);
353355
}
354356
assignVarToA(vis, 'max2', cur_max2);

src/algorithms/controllers/msort_lista_td.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ export function run_msort() {
216216
// Define quicksort functions
217217
// ----------------------------------------------------------------------------------------------------------------------------
218218

219-
// XXX unused currently
219+
// XXX unused currently (also modified in msort_arr_td.js)
220220
function renderInMerge(vis, a, b, cur_left, cur_ap1, cur_ap2, cur_bp, cur_max1, cur_max2, c_stk) {
221221
if (isMergeExpanded()) {
222222
vis.array.set(a, 'msort_lista_td');

src/algorithms/controllers/msort_shared.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,20 @@ export function highlight2Runlength(vis, left, mid, right, colorA, colorB) {
8787
// Assigns label to array A at index, checks if index is greater than size of array
8888
// if index is greater than size, assign label to last element in array
8989
export function assignVarToA(vis, variable_name, index, size) {
90-
if (index === undefined)
90+
if (index === undefined) {
9191
vis.array.removeVariable(variable_name);
92-
else if (index >= size)
93-
vis.array.assignVariable(variable_name, size - 1)
94-
else
92+
// may need to remove out of bounds version also
93+
vis.array.removeVariable(variable_name+'>'+size);
94+
} else if (index >= size) { // can't render beyond array:(
95+
vis.array.assignVariable(variable_name+'>'+size, size - 1)
96+
vis.array.removeVariable(variable_name);
97+
} else {
9598
vis.array.assignVariable(variable_name, index);
99+
vis.array.removeVariable(variable_name+'>'+size);
100+
}
96101
}
97102

98-
// Same as above function bet also checks if array B is displayed
103+
// Same as above function but also checks if array B is displayed
99104
export function assignVarToB(vis, variable_name, index, size) {
100105
if (isMergeExpanded()) {
101106
if (index === undefined)

src/algorithms/controllers/quickSort_shared.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ export function isRecursionExpanded() {
5353
const VIS_VARIABLE_STRINGS = {
5454
i_left_index: 'i',
5555
j_right_index: 'j',
56-
i_eq_0: 'i==0',
57-
j_eq_0: 'j==0',
56+
i_eq_0: 'i=0',
57+
j_eq_0: 'j=0',
5858
pivot: 'pivot',
5959
};
6060

src/algorithms/pseudocode/msort_arr_nat.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ MergeAll
4747
\\In}
4848
runcount <- runcount + 1 \\B runcount+
4949
left <- right + 1 // skip to the next pair of runs (if any) \\B left2
50-
until left >= size
50+
until left > size
5151
\\In}
5252
// all consecutive pairs of runs merged \\B mergeDone
5353
\\Code}

0 commit comments

Comments
 (0)