BIOGRAPHY OF EDSGER W. DIJKSTRA Edsger Wybe Dijkstra was born on May 11, 1930 in Rotterdam, Netherlands. Born to a chemist and a mathematician (father and mother, respectively), it was inevitable for Dijkstra to excel in education. “I asked my mother whether mathematics was a difficult topic. She said to be sure to learn all the formulas and be sure you know them. The second thing to remember is if you need more than five lines to prove something, then you’re on the wrong track.” 1 When he turned 12, he entered a high school especially for those extremely gifted students. He studied a variety of courses including, of course, chemistry and mathematics along with a variety of foreign language classes and biology. He attended Cambridge University in 1951 and started working at the Mathematical Centre in Amsterdam which continued to peak his interest in computer science and programming. While attending the Mathematical Centre he had to make a decision whether he wanted to be a theoretical physicist or whether he wanted to pursue his passion of computer programming. The decision was not easy as programming was not a well known and respectable profession. He finally chose programming and Dijkstra received a PhD in 1959 from the University of Amsterdam with his emphasis on the assembly language. In the 1970’s Dijkstra began working at Burroughs Corporation as a research fellow, then in 1984 he held the Schlumberger Centennial Chair in Computer Science at The University of Texas at Austin until his retirement in 2000. Dijkstra’s contributions made huge impacts to the world of computer science. “His ground-breaking contributions ranged from the engineering side of computer 1 Shasha, D, & Lazere, C (1995). Out Of Their Minds: The Lies and Discoveries of 15 great Computer Scientists. New York City: Copernicus. Pg. 55 science to the theoretical one and covered several areas including compiler construction, operating systems, distributed systems, sequential and concurrent programming, software engineering and graph algorithms.” 2 In 1959, Dijkstra’s paper titled A Note on Two Problems in Connexion with Graphs was published where he describes the solution to shortest path problem. One of Dijkstra’s first and biggest contributions to the mathematical world is known as the “Shortest – Path Algorithm“ or simply Dijkstra’s algorithm. “The algorithm solves a shortest path problem for a directed graph with nonnegative edge weights.” 3 Furthermore, a shortest path problem in mathematics is defined by “finding a path between two vertices such that the sum of the weights of its constituent edges is minimized.” 4 In the computer science world the algorithm is downplayed by competing algorithms. “Although the algorithm is very popular in the OR/MS literature, it is generally regarded as a "computer science method". Apparently this is due to three factors: (a) its inventor was a computer scientist (b) its association with special data structures, and (c) there are competing OR/MS oriented algorithms for the shortest path problem.” 5 The following is the formal definition of Dijkstra’s algorithm: G – arbitrary connected graph v0 – is the initial beginning vertex V – is the set of all vertices in the graph G S – set of all vertices with permanent labels n – number of vertices in G D – set of distances to v0 2 Apt, Krzysztof R. (2002). Obituray Edsger Wybe Dijkstra (1930-200): A Portraitof a Genius. Formal Aspects of Computing, 14, Retrieved March 20, 2007, from http://homepages.cwi.nl/~apt/ps/dijkstra.pdf Pg 93 3 Dijkstra's Algorithm. In Wikipedia [Web]. Wikimedia Foundation, Inc. Retrieved March 3, 2007, from http://en.wikipedia.org/wiki/Dijkstr's_algorithm 4 Shortest Path Problem. In Wikipedia [Web]. Wikimedia Foundation, Inc. Retrieved March 20, 2007, from http://en.wikipedia.org/wiki/Shortest_path_problem 5 Dijkstra's Algorithm. Retrieved March 05, 2007, from Dijkstra Web site: http://www.ms.unimelb.edu.au/~moshe/620-261/dijkstra/dijkstra.html C – set of edges in G Dijkstra’s Algorithm (graph G, vertex v0) { S={v)} For I = 1 to n D[i] = C[v0,i] For I = 1 to n-1 Choose vertex w in V-S such that D[w] is minimum Add w to S For each vertex v in V-S D[v] = min(D[v], D[w] + C[w,v]) }6 Starting at a particular vertex, the algorithm works through the graph until all vertices (nodes) have been reached and weight has been determined for all of the nodes of the graph. The following is a simple representation of how the algorithm works: Consider there are 3 possible routes between A and E. Your choices are ABE, ABCE and ABDE. We start at vertex A to find the shortest route. C A 3 B 1 3 E 5 2 1 D Next we determine the next vertex to be added to the path. Since we only have one choice we will add B to our path which gives us a distance of 3. 6 Dijkstra's Algorithm. Retrieved March 20, 2007, from Dijkstra's Algorithm Web site: http://www.cs.usask.ca/resources/tutorials/csconcepts/1999_8/tutorial/advanced/dijkstra/dijkstra.html C A 3 B 1 3 E 5 2 1 D Step 3 compares the weights between BC, BE, and BD to determine the next vertex to be added to the path. In the following diagram you will notice C is added as the next vertex which will give us a distance of 4. C A 3 B 1 3 E 5 2 1 D Step 4 compares the weights between CE, BE, and BD to determine the next vertex to be added. It is determined that D is the next vertex added giving us a distance of 5. C A 3 B 1 3 E 5 2 1 D Finally step 5 compares the weights between CE, BE, and DE. It is determined that DE is the last length to be added, which would make ABDE the shortest path with a length of 6. C A 3 B 1 3 E 5 2 1 D In reality, Dijkstra’s algorithm is used in many real life situations to figure out the shortest path to save time and money. His algorithm has been widely used in network communication, interstate/roadway planning, and air flight planning. The following example will demonstrate a realistic view at determining the shortest path for network traffic between Los Angeles, CA and New York, NY. Suppose a wide area network must determine the shortest path for network activity to flow from L.A to New York City based on cost and speed. The priorities (weights) of the diagram would be determined by the speed of the network connection. There are considerations when determining the shortest path that could impact time and money. The following are a few considerations the company would consider: 1. Line Capacity a. 56K b. T1 (1.544 Mbps) c. T3 (45 Mbps) 2. Transit Delay a. Number of Routers b. Time of Day 3. Data Type a. Video b. Database c. Voice d. Email Suppose there are a variety of potential routes the company is considering. Knowing the companies priorities and considerations, they will need to discover the shortest path from Los Angeles to New York City. The following is a graph of the routes with the weights applied according to the speed of the network connection. New Hampshire Seattle T1 router T1 router 56k T1 56k L.A. N.Y. T1 router router T1 router Denver T3 router T3 Dallas Applying Dijkstra’s algorithm to find the shortest path based upon speed is as follows: LA to Seattle New Hampshire Denver Dallas New York Denver to Seattle New Hampshire LA Dallas New York - LA to Seattle - LA to Seattle to New Hampshire - LA to Denver - LA to Dallas - LA to Dallas to New York - Denver to LA to Seattle - Denver to New York to New Hampshire - Denver to LA - Denver to Dallas - Denver to New York Considering the possibility of a router going down, Dijkstra’s algorithm can quickly recalculate the most efficient paths. The following shows the shortest path based upon speed if Dallas went offline: LA to Seattle New Hampshire - LA to Seattle - LA to Seattle to New Hampshire Denver New York Denver to Seattle New Hampshire LA New York - LA to Denver - LA to Denver to New York - Denver to LA to Seattle - Denver to New York to New Hampshire - Denver to LA - Denver to New York Along with Dijkstra’s algorithm, he was well known for his essays and papers on programming. He developed many concepts and algorithms in the areas of computer science and mathematics which are a compilation of manuscripts called EDWs. The collection of these manuscripts can be found in books such as Selected Writings on Computing: A personal perspective or available on the web at www.cs.utexas.edu/users/EWD/ . They included topics ranging from his findings on self-stabilization and the theorem about odd powers and odd integers to trip reports (where he would describe various places he would attend conferences and lectures). Many of Dijkstra’s accomplishments discussed from here on out in this paper were based off his manuscripts. About 5 years after Dijkstra started his work on shortest path algorithms, he became a pioneer in his study of distributed computers which included semaphore and mutual exclusion. Dijkstra began testing his theories on the X1 and X8 (successors to ARAMAC). “Dijkstra arranged each device attached to the computer to perform its tasks one step at a time, while exchanging messages with the computer. In computer jargon, these are called communicating sequential processes.” 7 In the computer world the problem comes when trying to synchronize these processes that are accessing the same 7 Shasha, D, & Lazere, C (1995). Out Of Their Minds: The Lies and Discoveries of 15 great Computer Scientists. New York City: Copernicus. Pg 61 piece of data. Like a database, you must find a way to avoid collision of the same data. To avoid the collision Dijkstra used a semaphore analogy of train signaling system. The semaphore is used to only allow one train to pass at a time when they share a similar piece of track in their route. This use of a semaphore is called mutual exclusion. Thus, Dijkstra took this analogy and applied it to the interaction between a keyboard and a computer. The buffer is the medium between the two and only one of them should be writing or reading at any one time. Along the lines of mutual exclusion would be Dijkstra contributions to distributed computing. In his paper Self-Stabilization in Spite of Distributed Control, Dijkstra talks about the state a computer in a distributed system must attain to properly access data without conflicting with others. Dijkstra states “I call a system “self-stabilizing” when, regardless of its initial state, it is guaranteed to arrive at a legitimate state in a finite number of steps.” 8 You can think of Dijkstra solution as a token ring being passed around the network. One can access data only if it has the token. The solution requires at least on computer in the network to obtain the token at all times. Dijkstra states “Selfstabilizing systems with distributed control do exist in the sense that local decisions force the system towards satisfying and then maintaining a global requirement. In particular, local mutual exclusion is a sufficient building block for eventually achieving mutual exclusion globally.” 9 Early works of self-stabilization did not take into account the detection of faults instead proceeded to obtain a legitimate state. 8 Dijkstra, Edsger W. (1982). Selected Writings on Computing: A Personal Perspective. New York, NY: Spinger-Verlag New York Inc. Pg 42 9 Dijkstra, Edsger W. (1982). Selected Writings on Computing: A Personal Perspective. New York, NY: Spinger-Verlag New York Inc. Pg Through all of Dijkstra’s research on multi-process synchronization he came up with an examination question for his students at Einhoven Technical University where a set of computers where fighting for the access to the same data stores. The examination problem would later be known as the dining philosopher’s problem by Tony Hoare. The problem addresses the issues involved with using a token ring solution for multi-process synchronization. The problem describes how 5 philosophers are sitting around a table with a bowl of rice in front of each of them and a chopstick between each bowl. They are allowed to do one of 2 things at any given time: think or eat. In order to eat, each philosopher must have 2 chopsticks. As in the token ring solution there are 3 situations that can occur: 1. Deadlock: This occurs when all the philosophers obtain the chopstick to the right of them and endlessly wait for the chopstick to their left. 2. Starvation: This occurs when one of the philosophers decided not to eat while another philosopher grabs his chopstick, but causing an issue when the first philosophers makes an attempt to eat but his chopstick is never released. 3. Lack of Fairness: This occurs when one some philosophers get to eat more often than others. In Dijkstra’s paper Hierarchical ordering of sequential processes, he begins to discuss solutions to the problems of deadlocking and starvation. He starts by exploring the idea of those programs needing to be run simultaneously; they should run on separate processors in order to keep from interfering with one another. As Dijkstra proceeds to describe the solution of mutual exclusion the most critical aspect is network communication between the processors and the data store. Dijkstra proceeds to show his proof to the problem in which the solution he describes combines the use of multiple semaphores and applying the restrictions of synchronization. In 1968, he wrote a paper A case against the GO TO statement with his viewpoint of the harmfulness of using GO TO statements in programming. Dijkstra’s believes the GO TO statement in programming will eventually only hinder the program rather than help. He describes the progress of a process and how this process is more difficult to determine once a programmer introduces the use of GO TO statements. A program with well defined statements (including loops, if else and repetition clauses), is much easier to reproduce the action and determine the action in which it failed. With GO TO statements, this task becomes more difficult to determine progress with the program. “If we wish to count the number, n say, of people in an initially empty room, we can achieve this by increasing n by one whenever we see someone entering the room. In the in-between moment that we have observed someone entering the room but have not yet performed the subsequent increase of n, its value equals the number of people in the room minus one.” 10 In 1970, he began publishing his opinion on formal verification. Instead of developing a program and proving its purpose and accuracy after the fact, Dijkstra believed the concept behind the program should be done simultaneously to develop insight into the program and why it was created. As computers and software have grown exponentially in their abilities and power to solve complex algorithms, the individual behind the programmer has not exponentially grown as well. Dijkstra’s way of thinking is known as program deviation. In his book, A Discipline of Programming, Dijkstra takes many algorithms and applies his idea of program deviation in which he starts with a proof to a problem and develops the appropriate program to solve it. He believes that a program should work hand in hand with a programmer to solve the problem, not to be so complex you cannot restructure the program into a mathematical algorithm. “Today a usual technique is to make a program and then to test it. But: program testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence. The only effective way to raise the confidence level of a program significantly is to give a convincing proof of its correctness.” 11 Dijkstra retired in 2000 after pioneering many concepts and thoughts on the computer science and mathematical industries. After a long battle with cancer, Edsger W. Dijkstra passed away in Nuenen, The Netherlands on August 6, 2002. A year after his passing the ACM (Association for Computing Machinery) renamed the PODC Influential 10 Dijkstra, Edsger W. (1968). Go To Statement Considered Harmful. Communications of hte ACM, 11, Retrieved March 22, 2007, from http://www.acm.org/classics/oct95/ 11 Dijkstra, Edsger W. (1972). Retrieved March 20, 2007, from The Humble Programmer Web site: http://awards.acm.org/turing/addl_info/articles/4860551.pdf Pg 26 Paper Award, in which Dijkstra won for his extensive work on distributed computing, to the Dijkstra Prize in his honor. Bibliography Dijkstra, E. W., & Scholten, C. S. (1990). Predicate Calculus and Program Semantics. New York City: Springer-Verlag New York Inc. Dijkstra, Edsger W. (1982). Selected Writings on Computing: A Personal Perspective. New York, NY: Spinger-Verlag New York Inc. Dijkstra, Edsger W. (1976). A Discipline of Programming. Englewood Cliffs, NJ: Prentice-Hall, Inc.. Shasha, D, & Lazere, C (1995). Out Of Their Minds: The Lies and Discoveries of 15 great Computer Scientists. New York City: Copernicus. Dijkstra's Algorithm. Retrieved March 05, 2007, from Dijkstra Web site: http://www.ms.unimelb.edu.au/~moshe/620-261/dijkstra/dijkstra.html Dijkstra, Edsger W. (1965). A Note of Two Problems in Connexion with Graphs. Retrieved March 17, 2007, Web site: http://www-m3.ma.tum.de/twiki/pub/MN0506/WebHome/dijkstra.pdf Knuth, Donald E. (December 1974). Structured Programming with go to Statements. Computing Surveys, 6, Retrieved March 19, 2007, from http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf Dijkstra, Edsger W. Hierarchical Ordering of Sequencial Processes. Retrieved March 19, 2007, Web site: http://www.cs.utexas.edu/users/EWD/ewd03xx/EWD310.PDF Dijkstra, Edsger W. (1972). The Humble Programmer. Retrieved March 22, 2007, Web site: http://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html Freedom at the Mathematisch Centrum. Retrieved March 24, 2007, from Mathematical Center Amsterdam Web site: http://cs-exhibitions.uni-klu.ac.at/index.php?id=29 E.W. Dijkstra Archive: Home page. Retrieved March 22, 2007, from E.W. Dijkstra Archive The Manuscripts of Edsger W. Dijkstra Web site: http://www.cs.utexas.edu/users/EWD/ Edsger Dijkstra. In Wikipedia [Web]. Wikimedia Foundation, Inc. Retrieved March 3, 2007, from http://en.wikipedia.org/wiki/Edsger_Dijkstra Dijkstra's Algorithm. In Wikipedia [Web]. Wikimedia Foundation, Inc. Retrieved March 3, 2007, from http://en.wikipedia.org/wiki/Dijkstr's_algorithm Shortest Path Problem. In Wikipedia [Web]. Wikimedia Foundation, Inc. Retrieved March 20, 2007, from http://en.wikipedia.org/wiki/Shortest_path_problem (2006). Retrieved March 18, 2007, from Association for Computing Machinery: A.M. Turing Award Web site: http://awards.acm.org/citation.cfm?id=4860551&srt=all&aw=140&ao=AMTURING Edgser W. Dijkstra. Retrieved March 18, 2007, from Edsger Wybe Dijkstra Web site: http://www.thocp.net/biographies/dijkstra_edsger.htm#5 Edsger W. Dijkstra@Everythingw.com. Retrieved March 5, 2007, from Edsger W. Dijkstra Web site: http://www.everything2.com/index.pl?node_id=162082 Dijkstra's algorithm@Everything2.com. Retrieved March 5, 2007, from Dijkstra's algorithm Web site: http://www.everything2.com/index.pl?node_id=551463 A Guide to the Edsger W. Dijkstra Papers, 1948-2002. Retrieved March 18, 2007, from The Center for American History: The University of Texas at Austin Web site: http://www.lib.utexas.edu/taro/utcah/00378/cah-00378.html#series19 Razavi, Roozbeh Retrieved March 5, 2007, from How Routing Algorithms Work Web site: http://computer.howstuffworks.com/routing-algorithm3.htm Dijkstra's Algorithm. Retrieved March 20, 2007, from Dijkstra's Algorithm Web site: http://www.cs.usask.ca/resources/tutorials/csconcepts/1999_8/tutorial/advanced/dijkstra/dijkstra.html Dijkstra's algorithm: Information form Answers.com. Retrieved March 20, 2007, from Dijkstra's Algorithm Web site: http://www.answers.com/topic/dijkstra-s-algorithm Apt, Krzysztof R. (2002). Obituray Edsger Wybe Dijkstra (1930-200): A Portraitof a Genius. Formal Aspects of Computing, 14, Retrieved March 20, 2007, from http://homepages.cwi.nl/~apt/ps/dijkstra.pdf Dijkstra, Edsger W. (1972). Retrieved March 20, 2007, from The Humble Programmer Web site: http://awards.acm.org/turing/addl_info/articles/4860551.pdf Dijkstra, Edsger W. (1968). Go To Statement Considered Harmful. Communications of hte ACM, 11, Retrieved March 22, 2007, from http://www.acm.org/classics/oct95/