Sometimes I hear people say that because of the speed of processors
and the amount of memory available, algorithm efficiency and runtime
aren't, in practice, of major concern.
Take it with a grain of salt. More computing power basically just means that your n can become much larger before it significantly slows down. For most everyday problems, this n is now large enough that you don't need to care. However, you should still know the complexities of your algorithms.
With more available resources, it may need to crunch more data later. Today you need to analyze a 10MB log file with 100,000 lines. In a year you may have a 100GB log file with 1,000,000,000 lines. If the amount of data grows faster than the resource powers, you run into problems later.
With more available resources, more layers are stacked upon each other. OS, OS framework, 3rd party framework, language interpreter, and finally on top your own tool. All unnecessary inefficiencies in all the different layers multiply up. Tomorrow your tool may run on a new OS with more bells and whistles, that itself eats more cycles and more memory, leaving less for you.
So to answer your question, you still need to care where more and more data needs to be crunched (enough examples given in the other answers), and where you do not provide the final tool, but another abstraction layer for other tools.
O(n*log(n))algorithm will finish faster on an 30 years old computer than anO(n!)orO(n*n)on today's most expensive hardware ifnis big enough. – vsz Feb 11 '12 at 18:19O(c * f(n))Where the constantcis based on the inefficiency of the hardware. You can have a 1000 times faster system, asngoes to infinity, it will matter less and less. I would choose anO(10000 * log(n))instead of anO(n)any day if I suspect thatncan be large. – vsz Feb 11 '12 at 18:23