Recent News

[click here to zip down to the schedule of public lectures]

Financial Fiasco

Leading banks and investment funds have been foundering, because of bad debts and lack of trust; and other, less well-known kinds of fiscal chaos are also on the horizon. For example, due to an unfixable security flaw in the way funds are now transferred electronically, worldwide, it is no longer safe to write personal checks. A criminal who sees the numbers that are printed at the bottom of any check that you write can use that information to withdraw all the money from your account. He or she can do this in various ways, without even knowing your name --- for example by creating an ATM card, or by impersonating a bank in some country of the world where safeguards are minimal, or by printing a document that looks like a check. The account number and routing information are all that international financial institutions look at before deciding to transfer funds from one account to another. (See, for example, Grant Bugher's comments.) More and more criminals are learning about this easy way to acquire money, and devising new schemes to conceal their identities as they steal the assets of more victims.

Nowadays almost everybody knows that it's dangerous to reveal your credit card number, or to have that full number on a printed document that somebody might find in the trash. Soon people will learn that it is equally dangerous to reveal the numbers that are printed in plain sight on every check. Forget signatures; banks have no time to verify them. The once venerable system of checking accounts is irretrievably broken. Before long, companies will find it impossible to give out paychecks without exposing themselves to unacceptable risk.

One consequence of this debacle is, alas, that I can no longer write checks to reward the people who discover errors in my books. The system that I've been using has worked well for almost forty years; but recently I have had to close three checking accounts, and the criminal attacks on those accounts have caused significant grief to my bankers. (Certainly I do not believe that anybody who received one of my checks has been in any way a culprit. But all such recipients are entitled to bragging rights; therefore the numbers printed on those checks inevitably become known to random members of the public.) I cannot in good conscience continue to traumatize the people at my bank, who obviously have plenty of other things to worry about.

After painful deliberation I've come up with a new plan, which I hope will be acceptable to all concerned, and perhaps even welcomed as an improvement. Instead of rewarding heroic bug-finders with dollars, I shall henceforth award brownie points, otherwise known as hexadecimal dollars ( 0x$ ). From now on it will be kudos, not escudos.

Instead of writing personal checks, I'll write personal certificates of deposit to each awardee's account at the Bank of San Serriffe, which is an offshore institution that has branches in Blefuscu and Elbonia on the planet Pincus.

It turns out that only 9 of the first 275 checks that I've sent out since the beginning of 2006 have actually been cashed. The others have apparently been cached. So this change in policy will probably not affect too many people. On the other hand, I don't like to renege on promises, so I shall do my best to find a suitable way to send money to anyone who really prefers legal tender.

Everybody who has received a reward check or a hexadecimal certificate from me since 1 January 2006 automatically has an account at the Bank of San Serriffe, and these accounts are listed on the bank's website. All of these people have my undying gratitude for the invaluable help they've generously provided in order to improve the books and the software that I've written. I ask friendly readers to keep sending those precious bug reports, and to let me know if my new policy displeases you in any way.

The First 200 Pages of Volume 4 Are Here!

On May 1 I received my first copies of The Art of Computer Programming , Volume 4, Fascicle 0, a paperback edition of what will eventually form the opening sections of Volume 4A and the answers to more than 350 exercises.

Section 7 An Introduction to Chapter 7 (Combinatorial Searching) Section 7.1.1 Boolean Basics Section 7.1.2 Boolean Evaluation

Anybody who's interested should contact their favorite bookseller for a spiffy new copy of the first printing. This booklet joins the already-published fascicles 2, 3, 4; look for fascicle 1 early next year.

Sneak preview of Volume 4, Fascicle 1

I spend most of my time these days grinding out new pages for the fascicles of the future. Early drafts are posted here, ready for beta-testing.

I've put these drafts online primarily so that experts in the field can help me check the results. But brave souls who aren't afraid to look at relatively raw copy are welcome to look too. (Yes, the usual rewards apply if you find any mistakes.)

(If you have trouble downloading these files, your browser is probably screwing up; please see my FAQ page for a workaround.)

Note to Internet friends: I'm extremely grateful that hundreds of you have taken time to read these drafts, and to detect and report errors that you've found. Your comments have improved the material enormously. But I must confess that I'm also disappointed to have had absolutely no feedback so far on several of the exercises on which I worked hardest when I was preparing this material. Could it be that (1) you've said nothing about them because I somehow managed to get the details perfect? Or is it that (2) you shy away from the more difficult stuff, being unable to spend more than a few minutes on any particular topic? Although I do not like to think that readers are lazy, I fear that hypothesis (1) is far less likely than hypothesis (2). I may have to remove material that nobody cares about. But I still cling to a belief that this stuff is extremely instructive. Thus I would like to enter here a plea for some readers to tell me explicitly, ``Dear Don, I have read exercise N and its answer very carefully, and I believe that it is 100% correct,'' where N is one of the following:

7--97 (properties of graph sums and graph products)

7--105 (characterization of graphical degree sequences)

7--131 (the maximum number of maximal cliques)

7--137 and 138 (generalized toruses)

7.1.1--83 (an online algorithm for optimum server locations)

7.1.1--116 (functions with conjectured maximum number of prime implicants)

7.1.1--122 (simple examples of regular functions that aren't threshold functions)

7.1.1--132 (properties of ``bent functions'')

7.1.2--16 (minimum-memory computation of 7-variable functions

7.1.2--36 and 37 (efficient prefix computation with small depth)

7.1.2--43 (efficient finite state transduction with small depth)

7.1.2--63 (upper bound for functions with lots of don't-cares)

7.1.2--67 (design of a tic-tac-toe chip)

7.1.2--68 (analysis of a functional decomposition algorithm)

7.1.2--76 (Uhlig's cloning algorithm, computes twice as fast as expected)

7.1.2--85 and 86 (introduction to Razborov's monotone lower bounds)

7.1.3--10 and 12 (multiplication and division in Conway's field)

7.1.3--19 (Paley's amazing rearrangement inequalities)

7.1.3--124 (lower bounds on a basic RAM)

7.1.3--158 and 159 (Fibonacci and negaFibonacci codeword manipulation)

7.1.3--179 (online algorithm for components of a bitmap)

7.1.4--107 (testing whether a BDD defines a 2SAT instance)

7.1.4--110 (explicit functions of $n$ variables whose BDD is largest)

7.1.4--124 (computing the BDD size for the hidden weighted bit function, given any permutation of the variables)

7.1.4--191 (counting all ZDDs that have no 0-sink)

7.1.4--216 (covering a chessboard with red, white, and blue dominoes)

7.1.4--226 (a new way to generate all simple cycles of a graph)

7.1.4--259 (generating all set partitions with ZDDs)

7.2.1.1--97 (analysis of a coroutine-based algorithm)

7.2.1.1--99 (decoding a recursively generated de Bruijn cycle)

7.2.1.3--25 (proof of van Zanten's theorem)

7.2.1.3--33 (enumeration of genlex listings for index lists)

7.2.1.3--42 (analysis of an algorithm for near-perfect combination generation)

7.2.1.3--63 (minimal-change algorithm for contingency tables)

7.2.1.3--100 (the heaviest multicomplexes)

7.2.1.4--18 (two versions of Zeilberger's one-to-one correspondence for joint partitions)

7.2.1.4--28 (Lehmer's fabulous formulas, to be checked empirically)

7.2.1.4--47 (Nijenhuis and Wilf's algorithm for random partitions)

7.2.1.5--28 and 29 (theory of generalized rook polynomials)

7.2.1.6--19 (proof that Skarbek's algorithm is dual to lexicographic generation)

7.2.1.6--25 (my new prune-and-graft method of generating all linked binary trees)

7.2.1.6--26, 27, 28 (basic facts about three important lattices of trees)

7.2.1.6--33 (representing binary tree links with a single permutation)

7.2.1.6--37 (analysis of the Zaks--Richards algorithm for trees by degrees)

7.2.1.6--60 (an algorithm to invert the Chung--Feller mapping)

7.2.1.6--99 (quick Gray code to list spanning trees of a series-parallel graph)

Remember that you don't have to work the exercise first; you're allowed and even encouraged to peek at the answer. Please send success reports to the usual address for bug reports ( taocp@cs.stanford.edu ), if you have time to provide this extra help. Thanks in advance!

Threescore Years and Ten (שבעים שנה)

OK, now I'm a septuagenarian! My Big Birthday actually happened six years ago, when I became sixty-four; sixty-four is 1000000 in binary, and it's 100010001 in the Fibonacci number system. But probably I'll learn something interesting about the number seventy during the coming year.

As another decade has passed, I'm overwhelmed by the feeling that I've been enormously blessed to have a loving wife and family, plus many friends around the world. Fortunately my health is still good, and I still seem to be able to "walk the walk and talk the talk" of a computer scientist and a sometime mathematician. So I have lots of reasons to be happy, while not forgetting that many serious problems remain unresolved.

When people reach this stage in their lives, they occasionally like to look back and reflect on what has shaped them. So I was pleased when a British organization, Peoples Archive, recently asked to make a series of videos in which I try to tell what I remember about my past life. Peoples Archive has now included those videos --- 97 short segments, together with transcripts --- in their excellent collection of stories, freely viewable from their website. (The other stories are, of course, more interesting than mine. Check out Freeman Dyson, Benoit Mandelbrot, Carl Djerassi, Stan Lee, ...!)

Last year Ed Feigenbaum and I also spent several pleasant days interviewing each other, as part of the Computer History Museum Oral History Project. Transcripts of those interviews will soon appear on that website, and CHM also will also make the videos available on DVD (about seven hours each).

An interview by Andrew Binstock

Andrew Binstock recently asked me some interesting questions about a wide range of subjects, and I tried to answer them clearly. The results are now posted on the informIT website; also in Chinese translation. (If you're interested, please read the original interview before looking at online comments that have little to do with what I really said! The Web is wonderful, but...)

An interview by James Buchanan

Another interview has been printed in Issue 77 of the UK magazine Linux User & Developer , according to their website. They promised to send me a copy, but never did. Can anybody tell me on what pages the interview appeared, and what was the exact date of publication, so that I can put the info on my CV? (Also it would be nice if I could see what they say I said. I'm not inclined to buy it from them at the moment. Does anyone have ideas on how I might have a look?) (Note added 9 Jan 09: OK, I've now got a copy, thanks!)

A Flame About 64-bit Pointers

It is absolutely idiotic to have 64-bit pointers when I compile a program that uses less than 4 gigabytes of RAM. When such pointer values appear inside a struct, they not only waste half the memory, they effectively throw away half of the cache.

The gcc manpage advertises an option "-mlong32" that sounds like what I want. Namely, I think it would compile code for my x86-64 architecture, taking advantage of the extra registers etc., but it would also know that my program is going to live inside a 32-bit virtual address space.

Unfortunately, the -mlong32 option was introduced only for MIPS computers, years ago. Nobody has yet adopted such conventions for today's most popular architecture. Probably that happens because programs compiled with this convention will need to be loaded with a special version of libc.

Please, somebody, make that possible.

Wanted: A Name For High-Tech Grief

A rapidly spreading kind of trauma now affects millions of people every day, but the English language hasn't yet been extended to deal with it.

Well-known neologisms like `jet lag' and `road rage' describe well-known phenomena. But what do we call the combination of helplessness and agony that affects us when our computers or computer-based appliances do inexplicable things, for which there's no apparent workaround?

I've often seen secretaries in tears when they're trying to cope with name-brand operating systems. My computer-savvy friends tell me that their vacations with relatives tend to be occupied mostly by the need to fix hardware and software glitches. I myself have often cried out for help to colleagues who have generously made house calls, in order to unwedge my highly customized Linux system.

Recent discussions with friends have led to several good suggestions, including:

cyber despair (David Eisenbud, Talin)

(David Eisenbud, Talin) technitis (Chuck McManis)

(Chuck McManis) compu-terror (Steve Diamond)

(Steve Diamond) cyber burned or cyburned (Betsy Zeller, Dave Marvit)

or (Betsy Zeller, Dave Marvit) techno lost (Ned Holbrook)

(Ned Holbrook) byte-bitten (Robert Sapolsky)

(Robert Sapolsky) digital dread (Aza Raskin)

(Aza Raskin) techno angst (Jono DiCarlo)

(Jono DiCarlo) irritable bit syndrome (Charles Merriam)

(Charles Merriam) bot rot (Bruce Baumgart)

(Bruce Baumgart) PC panic (J. H. Quick, student)

(J. H. Quick, student) PCsick , rhymes with seasick (Bruce Baumgart)

, rhymes with seasick (Bruce Baumgart) notwork failure (Joshua Levy)

(Joshua Levy) Vista-vexation (Ryan Zoerner)

In a few random conversations I found that the first of these was most likely to provoke instant recognition and a lively response. But my sample size has been small.

What to do? I suggest that, the next time you're attacked by this malady, you run through the list above and see which term best characterizes your feelings. Then blog about it. The best term should soon rise to the top, and become integrated into our common vocabulary.

Did you borrow a video from me?

Videotapes of most of my Computer Musings have been made since 1998, and I have often loaned copies to people who were unable to attend in person.

Now there is good news and bad news. The good news is that dozens of these videos have been digitized, and they are available for viewing. The bad news is that three people have not returned the tapes they borrowed, and there is no backup copy; I learned recently that my copy was unique, because all the master tapes were erased. If you are the person who currently has any of the following tapes:

Twisted toruses (or: tori, tori, tori), from 10 May 2001;

Totally acyclic digraphs (spiders) and how to squish them, from 06 Dec 2001;

Topological sorting revisited, from 23 Apr 2002;

please PLEASE return it/them immediately.

The TeX Tuneup of 2008

New versions of TeX (3.1415926) and METAFONT (2.718281) have just been released, after five years of accumulated experience with the previous versions. Although some bugs were fixed, they don't affect user programs that were error-free before, except that TeX may now run a bit faster. Nobody needs to rush to upgrade, but you will of course be wise to install the latest and greatest versions whenever you get a new computer. Another review is planned for six years hence (see the Computers & Typesetting home page). Enjoy!

Public lectures

Although I must stay home most of the time and work on books that I've promised to complete, I do occasionally get into speaking mode. Here is a current schedule of events that have been planned for this year so far: