I think that algorithms described in a paper should have accompanying source code.
I was giving a presentation that basically summarized "Laplacian Eigenmaps for Dimensionality Reduction and Data Representation Methods" by Belkin and Niyogi.
I had this bullet point:
- Nodes i and j are connected by an edge if i is among n nearest
neighbors of j or j is among n nearest neighbors of i
I made comment about how this was not a symmetric property. A person asked a question about why it was not symmetric.
My answer was basically, its symmetric but depending on how you parse the sentence it can be un-symmetric. One way the OR is part of the algorithm, the other way, the OR is an or in the implementation of the algorithm.
One way is to say:
(defun edgep (i j)
(or (n-nearest-neighbors i j *n*)
(n-nearest-neighbors j i *n*)))
Another way:
define edgep like this,
(defun edgep (i j)
(n-nearest-neighbors i j *n*))
or define edgep like this,
(defun edgep (i j)
(n-nearest-neighbors j i *n*))
So, yeah, if you are describing an algorithm, and there is more than one way to do a step, be clear whether you mean that you can do it two ways, or that they have to OR the results of two sub-steps. I mean, it wasn't that ambiguous. But it shouldn't be able to have multiple interpretations, even if one seems like a stretch, cuz some unsuspecting grad student will find it.