I had written this program as the Spring 1993 term project, while I was a psychology senior, taking a computer-engineering graduate-level (elective) course. Flow-deviation was not in the lecture topics, nor based on.
From a few old communication-networks papers, I worked out (designed & coded) all of the software myself.
I do not remember finding any of these papers myself, though -- unless through the references of a textbook. Probably that AssistantProf pointed at all of the papers, as the project, for me.
If to talk with "engineering" buzz, I was not quite in the category of a communication-networks guru. I could count as a software engineer (deriving the specification from those published papers), or a knowledge engineer (tracking the emphases of those old masters of the field).
The graph data structure is from a textbook that I had bought ("Data Structures in C" Tenenbaum, Langsam, & Augenstein, 1990, Prentice-Hall) -- not the textbook which that AssProf was using.
After I had finished the software, by co-incidence, I saw that AssProf evaluate the undergrad graduation-project of a boy. That was the same topic as mine, and the boy said that he had seen my code -- the AssProf gave him.
He said, although what I had written was useful, he had not gone into that length. Well, no problem until that point. That is, I am not talking about a plagiarism case, here, so far as I know this case.
The problem was that, that boy and that AssProf were talking about that project (as I was also sitting in that, otherwise empty, class), about testing with fixed-increments. What?!? That is floating-point. Not integer.
In the code I publish, I had coded binary-search for looking up, but they were trying to find that with shooting at intervals, as if that were integer. The next year, when I told that that was not good enough, that AssProf said that he knew that was not as fast. Fast? Who is talking about fastness? (To look up ten or twenty fixed-gap numbers within that range, may or may not be slower than binary-search.) I coded that as a binary search because, for really optimizing the routing, that was essential to look up to the limit of sensitivity of the floating-point representation.
I remember that "fast" was about the program, computing the results. His ignorance. If about the optimality of the routing, that comment would mean admitting not to solve the problem right.
Strangely, that AssProf was also a lecturer of introductory courses on data structures, sorting, & searching. If he does not know/think that, I should warn the rest of you, for not committing such.
I cannot guess about him, whether that was a thoughtless-moment -- or, which chronic problem.
The following textbox is containing the fd.c.
Both the program, and the document, strangely, have the timestamp "June 13, 1994 5:21" in my archive, but that must have been some accidental re-save. I do not remember modifying this, after 1993. (Except the copyright statement at top, I am publishing that as that was.)
Legal Speak. THIS PROGRAM, AND OTHER FILES/CONTENT AT THIS SITE, IS/ARE PROVIDED AS IS, WITHOUT ANY GUARANTEES. IT IS THE USER'S RESPONSIBILITY/CHOICE TO MAKE SURE, TO ENSURE CORRECT OPERATION (TO HIS/HER/THEIR SATISFACTION LEVEL), ON THE SET OF PROBLEMS HE/SHE/IT ENCOUNTERS. IN JURISDICTIONS, OR CONDITIONS, WHERE SUCH NOTICES LIKE THIS, WOULD STILL LEAVE THE SOFTWARE/AUTHOR LIABLE FOR ANY DAMAGES, OR IN ANY WAY, WOULD LET LITIGATION TO EXIST, PERMISSION FOR USE IS NOT GIVEN.
To compile the program, you need the Turbo C compiler. Happily, Borland is giving that away for free, in their code-museum, for personal use. Download Turbo C++ 1.01 (zip), and load this program. Runnable right away.
Want to work with the graph examples I had run this program with? I list them, next.
g0 is with timestamp June30,1993 05:33
g1 is with timestamp June13,1994 05:21
g2 is with timestamp June27,1993 05:05
g3 is with timestamp June28,1993 02:48
g4 is with timestamp June28,1993 03:06
The following is the document accompanying the program. When that AssProf told me that the documet was "too short," I took him a photocopy of the CACM (July 1991) article "Nobody Reads Documentation." :-) I think this document is just appropriate. Not too short, and not uselessly bogging with trivia, either.
# For those users who would like to build their own graph-definitions, follows a quick reference and requirements list: ((When it says MUST, it means it: The graph-load operation will be aborted immediately with giving a corresponding error message.)) - In node, link-capacity, and commodity-flow-requirements definitions, the format of which will follow shortly, the important points about ordering is that, though both kind of definitions can go in mixed orders, when a link-capacity or commodity-flow-requirement definition refers to a node, that node MUST have already been defined, and the link and commodity definitions MUST come sorted on FirstNode+SecondNode and the nodes MUST come sorted on NodeNo's. (In case of curiosity, these latter requirements have been introduced to be able to check the file integrity with minimum memory usage and without actually loading it (and thereby overwriting the existing loaded graph-definition) in case the file is corrupt.) - The node definition format is: DEFNODE NodeNo NodeName where 'NodeNo' can be 0..9999 (can skip intermediates at will). 'NodeName' is a string in quotations and is used when generating user-readable output. - The link definition format is: DEFLINK Node1No Node2No LinkCapacity - The commodity definition format is: DEFREQ Node1No Node2No FlowRequirement - If you like, you can comment out lines after some column using '//' style line-comment beginners. # Once you have built a, decent, graph-definition file with the help of a text editor, it is very straightforward to run the program. It works through a single-level menu and the sheet is quite fault-tolerant (or user-proof).
The graduation projects of that university were not being registered on-line -- and probably still so. You may find the M.S. & Ph.D. theses in the university library, but the undergrad projects are/were totally within the dept that committed it. In 1995, I wrote to that university, a petition that was suggesting archiving all of those projects publicly, thus both protecting against accidents (e.g: burning), as well as informing the public (the prospective students, as well as employers, & project-valuing people) about the engineering "successes" occurring there.
I am not singling out that boy who was to that flow-deviation project, at the time I was there. That timing of the two projects in that same term, might be his bad luck, and probably contributed to his project grade being "only CC" -- as that AssProf was belittling the case, the next year with that "that project got only a CC" (CC is 70-to-74, that is "average" in the transcript jargon).
A classmate of that boy was belittling that case, too. He thought, not being able to see that AssProf a lot, to talk about the project, was a common problem. When contrasted to my case (writing the project all myself), that may sound as if no-excuse, but I would not judge people with the high standard I may have. That AssProf was his advisor, and both seem to blame the other.
There was no response to that petition. Around 2000, I learned that a plagiarist charlatan became the dept chair, and the next after him (as of 2005), was that AssProf of 1993 (a Prof, & DeptChair). Any dept-chair who shrinks graduation-project-publicity, may be implicitly accepting the blame that his institution is lacking-quality.
The M.S. thesis of that AssProf is presumably an example of what we would see.