
During the writing of this book, I wrote and rewrote it several times and more than half a dozen technical and nontechnical editors looked it over to try to make it the best book possible. Unfortunately no project this large is ever completely free of errors, and this one is certainly no exception. It's sort of like writing a 300,000+ word program without the benefit of a compiler to check your logic, spelling, and grammar.
Below is a list of errors that have been found in different versions of the book. Note that some errors appear in one version and not in others. For example, some errors seem to have been introduced during the process of converting the book from its initial print and pdf forms into the ePub form used by the iPad. Errors in the print edition probably occur in all editions.
Also note that page number doesn't apply to electronic formats because the page numbering depends on the size of your book reader and the font you are using.
If you find other errors, please let me know.
Chapter  Page  Edition  Details 
1 
13 
All 
Aleksey Khaustov noticed this one. While explaining how to search a binary tree, the text says this:
"If test_node's value does not equal target_value and is not less then target_value, then it must be greater then target_value. In that case, the algorithm sets test_node equal to its right child.
The final action of setting test_node equal to its right child is correct, but the description is wrong. It should be this:
"If target_value does not equal test_node's value and is not less then test_node's value, then it must be greater then test_node's value. In that case, the algorithm sets test_node equal to its right child.

1 
17 
All 
Somehow (I have no idea how) the last column in Table 1.1 is just plain wrong. Those aren't the correct values for factorials. The correct values are the following.
N  N! 
1  1 
5  120 
10  3.6×10^{6} 
15  1.3×10^{12} 
20  2.4×10^{18} 
50  3.0×10^{64} 
100  9.3×10^{157} 
1000  4.0×10^{2567} 
10000   
100000   

Chapters 13 and 14 


James Dunn has this to say about the NetworkMaker program used by Chapters 13 and 14.
I was experimenting with the Python version of the network maker (found in both ch13 and ch14). I discovered that I could not link two nodes with the mouse like I can in the C# version. I traced the problem to a critical missing step at the end of the Link class constructor code. It needs one more command to save the new link to one of the nodes, as in: node0.links.append(self)
After the correction, I am able to create a new link using the mouse.
Your book is an excellent resource for knowledge review. I appreciate your outstanding efforts!
Thanks James!

Appendix B 
624 
All 
The answer to Chapter 1 Exercise 3 is confusing and incorrect. Here's a revised version.
The question is, "For what N is 1,500×N > 30×N^{2}?" Dividing both sides of that equation by 30×N gives 50 > N. That means the original equation is true (and therefore the first algorithm is slower than the second) if 50 > N or N < 50. That means you should use the first algorithm if N > 50 and the second if N < 50. When N = 50, they both have the same performance.


