next up previous
Next: 5. Who is Looking? Up: Who is Interested in Repository Previous: 3. What are People

   
4. What are They Finding?

The majority of visitors to the Algorithms Repository come seeking implementations of algorithms which solve the problem they are interested in. To help guide the user among the relevant implementations for each problem, I have rated each implementation from 1 (lowest) to 10 (highest), with my rating reflecting my opinion of the chances that an applied user will find that this implementation solves their problem.

My ratings are completely subjective, and in many cases were based on a perusal of the documentation instead of first-hand experience with the codes. Therefore, I cannot defend the correctness of my ratings on any strong objective basis. Still, I believe that they have proven useful in pointing people to the most relevant implementation. Of the two linear programming packages, lpsolve and linprog, the higher rated code received over five times as many hits (1859 to 340) than the lower rated one. 3

Table 7 records the number of hits received for each implementation, along with the problem for which it received the highest rating, as well its average rating across all problems. LEDA [#!MN-95!#] received almost as many hits (8806) as the two following implementations, both associated with popular books [#!Sedgewick-92!#] (5339) and [#!GY-91!#] (4360). The fourth most popular implementation was (surprisingly) Ranger [#!MS-93!#] (3514), an implementation of kd-trees. This reflects the enormous popularity of nearest-neighbor searching in higher dimensions, as well as the fact that I had not updated the list of implementations since the publication of the book in November 1997. Arya and Mount's recently released ANN (http://www.cs.umd.edu/$\sim$mount/ANN/) would be a better choice. Such maintanence on the site is now underway. Note that these counts record the number of people who looked at the information page associated with each implementation. The actual number of ftps is unknown but presumably much lower.

Despite their shortcomings, I believe that these ratings provide a useful insight into the state of the art of combinatorial computing today. Hits per problem page measures the level of interest in a particular algorithmic problem. Program mass, the sum of the rankings of all implementations for a given problem, provides a measure of how much effort has been expended by the algorithm engineering community on the given problem. By comparing the ranks of each problem by program mass and the popularity, we can assess which problems are most (and least) in need of additional implementations.

Table 4 presents the results of such an analysis, showing the 20 most under (and over) implemented algorithmic problems. Kd-trees (rank 1) and suffix trees (rank 2) are the most needed data structure implementations, while the closely related problems of bin packing (rank 3) and knapsack (rank 4) are in the most need of algorithm implementations. There seems to be greater interest than activity in routing problems like Eulerian cycle/Chinese postman (rank 9) and traveling salesman (rank 14). On the other hand, traditional algorithm engineering topics like matching (rank 59) and network flow (rank 56) have resulted in a relative abundance of codes for these problems.


 
Table 4: Most needed and least needed implementations, based on program mass and hit ranks
  Rank by     Rank by  
Most Needed Implementations Mass Hits $\Delta$ Least Needed Implementations Mass Hits $\Delta$
kd-trees 52 2 -50 network-flow 5 19 14
suffix-trees 63 13 -50 random-numbers 14 28 14
bin-packing 75 27 -48 dfs-bfs 17 32 15
knapsack 58 18 -40 matching 1 17 16
polygon-partitioning 66 35 -31 unconstrained-optimization 36 52 16
simplifying-polygons 69 41 -28 vertex-coloring 4 20 16
nearest-neighbor 32 6 -26 fourier-transform 23 40 17
minkowski-sum 72 47 -25 cryptography 44 65 21
eulerian-cycle 67 43 -24 satisfiability 42 63 21
dictionaries 24 3 -21 high-precision-arithmetic 15 37 22
set-cover 71 50 -21 bandwidth 48 71 23
set-data-structures 51 31 -20 matrix-multiplication 22 45 23
motion-planning 74 57 -17 drawing-trees 30 54 24
traveling-salesman 21 4 -17 edge-coloring 38 62 24
scheduling 65 49 -16 maintaining-arrangements 43 67 24
string-matching 26 12 -14 planar-drawing 40 69 29
calendar-calculations 59 46 -13 generating-graphs 11 44 33
clique 45 33 -12 determinants 39 74 35
graph-partition 54 42 -12 generating-subsets 20 61 41
graph-isomorphism 50 39 -11 generating-partitions 12 60 48


next up previous
Next: 5. Who is Looking? Up: Who is Interested in Repository Previous: 3. What are People
Steve Skiena
1999-10-15