2009-07-06 7 views
5

¿Cuál es el mejor lugar o un enlace para aprender algoritmos en C? ¿Cómo sabe cuándo y dónde utilizar la implementación de algoritmos simplemente investigando los problemas?Algoritmos en C

+0

[Recetas numéricas en C] (http://www.nr.com/)! La [versión de 1992] (http://www.nrbook.com/a/bookcpdf.html) (2da edición) es excelente si no desea pagar la versión de 2007. –

Respuesta

4

Algorithms in C por Sedgewick es un gran lugar para comenzar la investigación. Una vez que esté familiarizado con los algoritmos disponibles y las características de rendimiento de cada uno, podrá ver dónde usar cada uno de ellos.

+0

Steve, cualquier documento en línea que podría ser mejor y más comprensible –

5

Para un libro razonable (aunque no perfecto) sobre la implementación de algoritmos comúnmente utilizados en C, pruebe el Algorithms in C de Sedgewick. Tenga en cuenta que, como para cualquier tema técnico, es probable que un libro en papel sea muy superior a cualquier recurso web.

En cuanto a cómo saber cuándo usar un algoritmo específico, me temo que eso se debe a la experiencia.

+0

¿Qué quieres decir con el libro de papel Neil? –

+0

Lo aclararé en mi respuesta. Quiere decir que tener un libro real generalmente es mejor que solo leer en línea. – GManNickG

+0

Claro .Gracias a GMan y Neil. Solo quiero hacerlo exhaustivo para mi entrevista. –

12

Los algoritmos no están necesariamente vinculados a un idioma específico, solo para aclarar, por lo que cualquier libro de algoritmos funcionará bien siempre que pueda entender que el concepto es la estructura de datos/algoritmo.

Dicho esto, esto parece una buena opción: Algorithms in C. Tengo el C++ equivalent en mi estante.

También hay un libro que parece ser independiente del idioma (corríjanme si me equivoco) llamado Data Structures & Algorithm's, aunque he oído que está un poco anticuado, por lo que se perderá estructuras más recientes.

No olvide que Internet tiene una gran cantidad de información available to you. Sin embargo, los libros suelen ser mejores para este tipo de cosas. Esto se debe a que los recursos de Internet tienden a centrarse en una cosa a la vez. Por ejemplo, necesita comprender lo que es Big-O notation antes de que pueda entender lo que significa cuando decimos que una Lista tiene eliminación O (1) [tiempo constante].

Un libro cubrirá estas cosas en el orden correcto, pero un recurso de Internet se centrará en la notación de Big-O o en las estructuras de datos, pero a menudo no las conectará fácilmente.


Cuando se trata de usar, te mayoría de realizar la conexión cuando se trata de lo que va a hacer con los datos.

Por ejemplo, es posible que desee un (matriz) vector si sólo tiene ordenó elementos, pero si necesita ordenó los elementos y la eliminación de cualquier lugar (pero puede sacrificar acceso aleatorio), entonces un list sería más apropiado, debido a su eliminación de tiempo constante.

+0

GMan, muchas gracias –

+0

También hay este libro llamado "Algorithms" por sartaj sahni (se olvidó de los coautores). Es un buen libro sobre Análisis y Diseño de Algoritmos. Cubre el tema extensamente, aunque podría ser un exceso para la entrevista solamente. – xxxxxxxxxadfas

2

U ¿Cómo saber cuándo y dónde utilizar la implementación de algoritmos por simplemente mirando a los problemas

Se llama "coincidencia de patrones", una vez que ha visto y resuelto muchos problemas comienzas a reconocer cosas comunes y puedes reutilizar tus conocimientos previos.

Por cierto, te recomendaría antes de un buen libro solo en algoritmos antes de comenzar con algoritmos en C, que son más difíciles de implementar y más propensos a errores que en lenguaje de nivel superior, y una vez que tienes mucha confianza con el procedimientos generales que puede comenzar a ajustarlos y optimizarlos en C.

0

The Algorithm Design Manual es digno de una mirada.

+0

Sí, realmente vale la pena verlo, pero creo que no es el mejor lugar para buscar algoritmos en C. Definitivamente lo ayudará a obtener una visión general de los algoritmos y sus aplicaciones en situaciones del mundo real – nairdaen

2

Muchos buenos recursos tienen ya se ha nombrado, así que no los repetiré aquí.

¿Cómo saber qué algoritmo usar cuando?

  • Es necesario tener una caja de herramientas lo suficientemente grande, que va a obtener por sentarse y penosamente a través de una larga lista de básica (y hacerlos más esotéricos) estructuras de datos y algoritmos. Debería tratar de obtener todos los elementos básicos, pero realmente solo necesita una muestra de los más especializados.

  • Es necesario comprender lo que están disponibles para usted (tiempo, la complejidad del código, la memoria, la única versus múltiples pasadas, en el lugar frente a la copia, estables frente al tipo inestables, etc. hasta la saciedad), y cómo compensaciones los algoritmos que estudias hacen en cada uno de estos. Nuevamente, este es solo un caso de mucho estudio. Big-O es un lugar para comenzar, pero no es el final y todo esto.

  • que necesita para obtener una idea de la comprensión de cuáles son los verdaderos límites que se enfrenta cuando se le presenta un problema, y ​​cómo expresar esto en términos de las compensaciones de algoritmos mencionados anteriormente. Esto requiere un grado de intuición, y generalmente se aprende con la práctica a lo largo del tiempo.

  • Vale la pena implementar algunas cosas más de una manera a medida que avanza, para aprender en su interior, lo que funciona y lo que no funciona.

  • Vale la pena leer el código escrito por personas con más experiencia que usted, para ver cómo piensan.

Buena suerte.

1

Leo Pointers on C por Kenneth Reek recientemente.Pensé que estaba bastante versado en C, pero este libro me dio algunas epifanías, a pesar de estar dirigido a principiantes. Los ejemplos de código son cosas bellas (pero no el código más rápido en una CPU de tipo x86). Proporciona buenas implementaciones de muchos de los algoritmos y estructuras de datos más comunes que están en uso, con excelentes explicaciones sobre por qué se implementan tal como están (y, a veces, códigos o sugerencias para implementaciones alternativas).

En la misma página que su pregunta: patrones para crear código reutilizable en C (eso es lo que todos queremos, ¿no?), C Interfaces and Implementations: Techniques for Creating Reusable Software, por David R. Hanson. Han pasado unos años desde que lo leí, y no tengo una copia para verificar que lo que recuerdo es correcto, pero si mal no recuerdo trata de cómo crear buenas C APIs a estructuras de datos y algoritmos, como así como dar implementaciones de ejemplo de algunos de los algoritmos más comunes.

de tema: Como la mayoría de los programas que he escrito de usar y tirar en C para uso privado, éste ayudó a deshacerme de algunos malos hábitos de programación, además de ser una excelente referencia C: C: A reference Manual. Me recuerda que debería comprar ese.

1

Se necesita experiencia para saber qué conjunto de algoritmos usar para un problema en particular. Definir un objetivo ayudará. La velocidad, la memoria, la solidez, la calidad de la solución ... son todos factores que determinan qué algoritmos usar. Podríamos diseñar diferentes soluciones para el mismo problema dado un conjunto diferente de factores y escenarios.

0

Un método fácil para aprender algoritmos es utilizar la página Wiki, que está dedicada a algunos algoritmos "clásicos" como algoritmos de búsqueda o de ordenación. La construcción de algoritmos se basa en la capacidad de utilizar diferentes estructuras de datos, como listas enlazadas o C. Por lo tanto, primero intente implementar diferentes estructuras de datos como la lista enlazada simple o el árbol binario, y luego trate de usar en diferentes algoritmos quién está relacionado con la realidad problemas de vida

+1

¿Qué tal vincular a alguna muestra? Páginas Wiki que le parecieron útiles? – martijno