-
Notifications
You must be signed in to change notification settings - Fork 173
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enforce the consistency between function parameters and algorithm input #33
Comments
Makes sense and feel free to contribute yourself. FYI none of us are actively maintaining the project. You don't need to tag us on every issue, we will take a look when we get time. |
Got it. I won't tag you in future issues. And I will rewrite some algorithm code and make pull requests :-) |
Here's a related issue: where should we place code for tracer initialization and To me it seems more natural to place tracer code inside the algorithm function. For Breadth-First Search/tree.js, it would be // import visualization libraries {
const { Tracer, GraphTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer');
// }
const G = [ // G[i][j] indicates whether the path from the i-th node to the j-th node exists or not
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
];
function BFS(G, s) { // s = start node
// define tracer variables {
const tracer = new GraphTracer();
const logger = new LogTracer();
tracer.log(logger);
Layout.setRoot(new VerticalLayout([tracer, logger]));
tracer.set(G);
tracer.layoutTree(0);
Tracer.delay();
// }
const Q = [];
Q.push(s); // add start node to queue
// visualize {
tracer.visit(s);
Tracer.delay();
// }
while (Q.length > 0) {
const node = Q.shift(); // dequeue
for (let i = 0; i < G[node].length; i++) {
if (G[node][i]) { // if current node has the i-th node as a child
Q.push(i); // add child node to queue
// visualize {
tracer.visit(i, node);
Tracer.delay();
// }
}
}
}
}
BFS(G, 0); The reason is that we may want to trace, say, an array declared inside the algorithm function. A case in point is the array algorithms/Greedy/Dijkstra's Shortest Path/code.js Lines 1 to 88 in fe3adcf
|
Take Breadth-First Search/tree.js (shown below) as an example.
The input to the BFS algorithm is a graph (or tree) and a starting node, while the
BFS
function only takes the starting nodes
as parameter, leaving the graphG
as a global variable. In my humble opinion, it would be better to avoid such mismatch, which can potentially confuse learners.Note: This mismatch also appears in some other algorithm code.
algorithms/Brute Force/Breadth-First Search/tree.js
Lines 1 to 50 in fe3adcf
The text was updated successfully, but these errors were encountered: