Most of the citations in the Web pages above do not include the full text / PDF of the actual paper, but if you do a Google search for the paper's title (and/or author list), you'll very quickly find the full text / PDF of the actual paper (usually located off of the author's home page).
To do specific topic searches for CS papers, the best online bibliographic search resource is Citeseer, a very elaborate CS publications data mining and search system, which ranks the papers by the number of citations (i.e., how many other papers refer to a given paper), so the most relevant papers tend to be listed first (like Google does). It also provides the PDF/PS to most of the papers there (over 100,000 CS papers in all). Highly recommended! (and its amazing that Citeseer is actually free service!)
Keep in mind that the sources listed above contain thousands of very interesting papers (as well as hundred of thousands of other papers), so you can spend a lifetime on these sites and still not read it all. So please don't get lost or discouraged by this mountain of knowledge.
If you want a more gentle introduction to recent algorithms and theory research, I recommend starting with the Cormen et al. class textbook (especially the "advanced topics" chapters) and tracking down the original papers mentioned in the "Chapter Notes" at the end of each chapter, and also looking at more recent papers published in those same conferences and journals, etc.)
A: The project is due on the (first) day of the final exam. One extra credit point will be given per each day that the project is turned in early.
A: The algorithm to get your questions answered is pretty simple:
Of course if you have a special reason to skip one of these levels of help, that's fine also, but lets try to stick to the above protocol.
Note that rule (2) is designed to encourage brainstorming among you, which is highly encouraged.
A: Just contact anyone in the class, and photocopy it from them. The names and Emails of everyone in the class, as well as the overhead slides and class handouts, are all available on the CS661 class Web site.
A: I use MS Word, which does a reasonable job (all my handouts/slides are done in MS Word). Another option is LaTex, which is a very powerful typesetting system, but this is overkill for many things; I use this for technical papers and camera-ready publications. LaTex is based on TeX, Don Knuth's famous typesetting system.
A: Well, I will first compute the course grades without *any* extra-credit (according to the breakdown discussed in the syllabus). Then, I will factor in the extra-credit, which will raise up the course grades of some people. So, two things are therefore true here:
a) this scheme is fair, in the sense that extra-credit could help you, but *not* having extra-credit will *not* hurt you (since the class grades are first computed *without* the extra-credit, and don't drop afterwards)
b) the more extra-credit you have, the higher your course grade will be.
The reason I use this extra-credit scheme is to encourage people to be more pro-active and participate more; this makes the learning process much more interesting, effective, and exciting.
Also, extra-credit problems encourages many people to think more, be resourceful, come prepared (and not be late) to class, remain alert, etc.
I hope this scheme is acceptable to everyone (it has worked very well for everyone in the past).
A: The book that I recommend on the subject of infinities is the next-to-last reference in the class handout which discusses some aspects of infinities, among other things. The book is:
Rucker, R., Infinity and the Mind: the Science and Philosophy of the Infinite , Harvester Press, 1982.
This book is also available for sale at Amazon.com
Its fascinating stuff - enjoy!
A: Aside from the puzzle project, you can pick other projects too. Please narrow down your interests to a few topics, and lets chat about it sometime and I'll help you converge on a single specific topic.
A: Here are some good puzzles and games Web stores.
* There is no need to try all permutations of all the pieces; clearly each puzzle can be solved by placing the pieces in a fixed permutation order (as long as each piece is placed into the right spot on the board). If your code goes through all piece permutations (and then tries all possible position combinations for each permutation), it runs in time N! longer than it needs to (where N is the number of pieces). This means it would run in months or years of CPU time instead of just seconds (!)
* Instead of picking a random or arbitrary permutation, have your code try to place the pieces on the board in the order of their decreasing size. To see why this is a much more efficient strategy, consider the following example, of five pieces to tile an 8x8 board:
###### # ###### ######## # ######## ######## # ######## ######## # ########If you start by placing the four 1x1 pieces first, there are 64-choose-4 ways to place them (which is a number in the millions), but most of these choices will lead to an infeasibility when trying to place the last large 5th piece. On the other hand, if you place the large (60-square) piece first, the other four small pieces will immediately fall into place, saving you a lot of time. So this (extreme) example illustrates why it is often more efficient to place the larger pieces first (basically because this will lead to infeasibiliy or dead ends sooner, which in turn prunes the search tree more aggressively, and therefore reduce the overall run time).
There are many other kinds of optimizations that you can implement, and some of them will help reduce the runtime tremendously.
A: Make the "flipping-allowed" a global user-selectable flag that applies to all the pieces. All pieces can be rotated though.
A: Good point. For most of those puzzles, they are new (at least to me), and so I don't know the total number of solutions myself. But as some of the projects are being turned in, a consensus will form w.r.t. this data, and then we'll know the number of solutions for each puzzle.
A: You may assume that only keyboard characters will be used (i.e., letters, numbers, and special characters).
A: Your code should be able to solve ANY puzzle; and in particular, it should be able to solve the 8x8 puzzles that are specified in the project description, among others.
A: No, pieces will be randomly scattered in the files, separated by blanks (as in the puzzle instances at http://www.cs.virginia.edu/~robins/puzzles/)
A: Most systems have a timing command, that takes another command as an argument and returns the CPU time used during its execution (on UNIX systems it is the time(1) command).
A: Lets agree that the maximum number of allowed colors is 50 (so these may be denoted in the input file by all the digits (0-9), the letters (a-z), and a few printable special characters (basically all the keyboard characters).
A: Lets agree that no input file will be more than 80 characters wide.
A: Yes, that is an option, as long as such an alternate project is relevant to the class material, is non-trivial in scope, etc. Please feel free to make a list of a few possible project topics, and we can then review these topics together and decide on which one would be most appropriate.
You can read more about such topics at the following subpage of the CS661 Web site:
http://www.cs.virginia.edu/~robins/CS_readings.html
For example, one point that I clarified recently w.r.t. midterm questions is the following. For sequence of coin flips (however long), every combination of H/T is possible. And the probability that an *infinite* sequence of *only* Heads will occur is *exactly* zero. But note that just because the probability of an event is *zero*, this *does not* mean that it is *impossible* for it to actually happen. For example, if you ask someone to (uniformly) pick an arbitrary real number between 3 and 4, the probability of them picking the real number Pi is mathematically equal to exactly zero, but this of course won't prevent a person from actually picking Pi in response to that query. Probability is sometime counter-intuitive like that, but there is no mathematical contradiction here.
Regarding what is "random" and how is it defined in various contexts, a good place to start reading about it is:
http://en.wikipedia.org/wiki/Randomness
In general, I strongly encourage all of you to read all the articles in http://www.cs.virginia.edu/~robins/CS_readings.html.
This set of articles is an informal easy-reading introduction to various important subareas of CS, theory, algorithms, and mathematics, and touches on their mutual interactions, as well as their relationships to other areas of science (e.g., physics, biology, etc.).
Reading such general-interest articles is a very important aspect of your Jedi :) training as computer scientists and researchers. Such readings will serve to expand your horizons, rid your mind of various biases and misconceptions, and its also a lot of fun! :)
A: You can do this by putting the rationals in a table (with cell (a,b) representing the rational number a/b), and then using dovetailing to establish the 1-to-1 correspondence.
A: Yes; in fact, you can dovetail in *any* finite number of dimensions. For example, in 3D, imagine a small sphere centered at the origin, slowly expanding out in size; now, just number using integers all the lattice points (i.e., all (a,b,c) with a,b,c all being integers) that the sphere intersects as it slowly inflates (if it intersects several lattice points simultaneously, number these in arbitrary order). This shows that the set of all ordered triplets is countable.
The due dates for the homeworks are posted on the CS661 course Web site. Homeworks will be collected in class (and graded as explained at the beginning of the course). Some exam (midterm and final) questions will come directly from the homeworks, so you are strongly advised to solve *all* the homework problems. I highly encourage you to work in groups on the homeworks. To facilitate the formation of study groups, the names/photos and Emails of the people in the class are available on the CS661 course Web site.
A: While a blank program may compile in some languages, it won't in C, where the shortest syntactically correct program is "main(){}". Also, a general self-printing program will be able to accommodate an arbitrary amount of "payload" in its source code (like computer viruses do), while a blank program is not scalable. So "nice try", :) but see if you can come up with a non-blank solution (say in C or C++).
Yes, you can use any programming language. But trivial solutions such as a blank program, or a BASIC program that just says "LIST" are not acceptable, as they do not capture the intent of this question. (Note also that the basic program "LIST" accesses the source code file in the process of listing the program source code, which contradicts one of the basic restrictions in the statement of this question, namely that no files may be accessed during execution.) Remember that this is an algorithmic question, not a cheap programming trick.
Q: In question 3, is the input array sorted?
A: No, the input array is not sorted.
A: Between a *given* pair of nodes (and that pair is given as part of the input).
A: A shortest path may not be unique - i.e., there could be *many* shortest paths, all having the same minimum weight. So among these, we are asked to find one with a *least* number of edges.
A: Yes, all graph edge weights are positive.
A: The problem asks for "a solution" to be reported, if one exists. So if you report two solutions, if one exists (and a second one exists also), that's fine.