2009-08-14 19 views
36

Tengo una buena idea de lo que es Big-O, y también sé algunos algoritmos de clasificación básicos, aunque, por alguna razón, nunca me sentí cómodo con ellos, y los sigo olvidando. He estado programando durante 4 años en Java, Python, C y C++; He sido un programador decente. Ahora, quiero ir más allá de aprender lenguajes de programación y comenzar a aprender algoritmos.¿Es Algorithm Design Manual un buen libro para principiantes en algoritmos?

Probé 'Introducción a los algoritmos' de Carmen et al. pero las Matemáticas son demasiado densas para mí (o, puede ser, soy demasiado densa para las Matemáticas en ese libro).

Ahora, estoy pensando en utilizar el Algorithm Design Manual de Steve Skiena. ¿Lo recomendarías para mi situación? ¿Tiene alguna otra recomendación si cree que esta no es la indicada para mí?

¡Gracias por su tiempo!

+0

Muy similar a esta pregunta: http://stackoverflow.com/questions/1249465/data-structures-and-algorithms-e-books/1249676#1249676 –

+5

+1 "o soy demasiado densa para las matemáticas" : D – batman

Respuesta

39

Sin duda recomendaría el libro de Skiena. Has empezado a aprender sobre algoritmos, también debes comenzar a aprender algoritmos.

A quien editado esta respuesta y se sustituye la última aparición de la palabra algoritmos con la palabra matemáticas: Me significaron algoritmos cuando escribí esta respuesta, todavía me refiero algoritmos, en sustitución de la palabra con las matemáticas cambian materialmente la respuesta. Si crees que las matemáticas son lo que OP debe aprender, publica tu propia respuesta para ese efecto. Si ha tenido problemas para leer el comentario a continuación, comprenderá por qué elegí los algoritmos y no matemáticas.

+11

"Has empezado a aprender sobre algoritmos, también debes comenzar a aprender algoritmos". - ¿Soy yo o esto no tiene mucho sentido? –

+15

Tiene sentido para mí. Es otra forma de decir: "En lugar de hablar de algoritmos, comienza a aprenderlo". – Srikanth

+21

Aprender sobre algoritmos significa aprender cosas tales como complejidad, iteración, recursión, divide y vencerás, sucursal, etc. Algoritmos de aprendizaje significa conocer qué es el quicksort, bubblesort, el algoritmo de Dijsktra, el algoritmo de Kruskal, etc. –

-1

Aquí hay un par de recomendaciones:

  • Aho & Ulman - "Algoritmos y Estructura de Datos"
  • Vhirt
  • Donald E. Knuth
  • - "El arte de la programación informática"
0

Si desea un enfoque de abajo a la tierra con un poco de matemáticas tirado intento Algorithms in a Nutshell - Por mi parte, en realidad disfrutaron de la lectura que es más de lo que puedo decir de la maestra Knuth. (Ok, hay algunas páginas en Knuth que eran lo suficientemente esclarecedor ser llamado divertido.)

1

Si se lo puede permitir (o su empleador paga por ella), y se programa en Java, me gustaría sugerir: Data Structures and Algorithms in Java. Cubre los mismos temas que se encuentran en otros libros, pero hace que sea fácil de aplicar y entender si estás acostumbrado a programar en Java. Por ejemplo, los libros de estructura de datos de C++ no suelen dedicar mucho tiempo a los hashes, ya que las estructuras basadas en hash no son tan comunes en la programación de C++. En Java, sin embargo, los hashes son muy comunes, y cada objeto tiene un método hashCode. El libro combina una buena combinación de teoría y práctica.

alt text http://ecx.images-amazon.com/images/I/51w6USIIpxL._SL160_.jpg

13

recomendaría contra el "Manual de diseño de algoritmos" para sus propósitos y para rozar Cormen o Wikipedia en su lugar.

Después de una breve introducción a los temas algorítmicos básicos, las páginas 171-437 realmente no le enseñan ni cómo funcionan los algoritmos ni cómo diseñarlos, sino más sobre qué algoritmos existen y dónde encontrar sus implementaciones (a veces se refiere a usted a las implementaciones que necesitará comprar, como en la sección de Programación Lineal)

Por ejemplo hay 3 páginas en la multiplicación de matrices, que dan algunos ejemplos de lo que es útil, presente la ingenua O (N) algoritmo, y mencione que hay mejores algoritmos como el O de Strassen (N 2.81) (sin describir el algoritmo), y le recomendamos que use la biblioteca LAPACK para él.

Así que si desea aprender cómo funcionan los algoritmos, en lugar de qué algoritmos existen y dónde encontrar sus implementaciones, una vez más, recomiendo contra "Algorithm Design Manual".

+6

No se puede "rozar" Cormen. – talonx

2

Compré el Algorithm Design Manual recientemente y solo he recorrido los primeros capítulos. Es un gran libro, pero en mi opinión (por lo que he leído hasta ahora):

(1) no es menos densa que la de Cormen.

(2) se trata más de implementaciones prácticas de algoritmos que algoritmos de aprendizaje.

+3

Es mucho menos denso que Cormen. – batman

Cuestiones relacionadas