Cómo mejorar mis habilidades de codificación algorítmica (básica)

Soy programador promedio. Así que mi consejo es para los tipos medios como yo.

En términos de Algoritmos de Aprendizaje. Es ilimitado, requiere un compromiso a largo plazo.
Entonces, si tiene que ver algún progreso, debe esperar hasta un año como mínimo.

Así que aquí está mi algoritmo para aprender algoritmos.

1. Mata a todos tus objetivos.
—————————
(Si tiene algún objetivo como el que tengo que aprender todos los algoritmos dentro de un año o el volumen múltiple de Learn Don Knuth dentro de un año y establecer relaciones, debe denunciarlo). Literalmente, no debería tener ningún objetivo. Si tienes metas no disfrutarás. Matará todo tu disfrute. Nunca jugarás. Nunca lo descubrirás. Nunca recorrerás un nuevo camino. No descubrirás nuevas formas de hacer cosas viejas.

2. Tenga en cuenta que no hay horario, no hay un programa de estudios ni tabla de contenidos para seguir.
————————————————————————————————————-
(No puedes encontrar la parte inferior o superior de cualquier parte, la parte inferior sería la mecánica cuántica, la parte superior sería varios años de luz de la Galaxia. No importa quién seas, siempre estás en el medio. Así que no desperdicies tus esfuerzos para encontrar Lo básico de lo básico. de lo básico.) Aprende sobre la marcha. (Por lo general, desperdicié mucho tiempo, como Buscar lo básico, aprender sobre ellos y Encontrar lo básico de lo básico, luego Apréndalos y hasta el momento haga el tipo de plan de la lista enlazada).
es decir, puede comenzar desde cualquier lugar desde la manipulación de bits hasta B + Tree.

3. Tomar cualquier algoritmo. Comprender los conceptos. Intenta implementarlo tú mismo.
————————————————————————————————————-
(No te preocupes por eso. No será perfecto. Algunas veces nunca lo harías. Pero Inténtalo. Es lo más difícil para mí en mi vida. Tienes que enfrentar tu miedo, te aplastará. matará tu confianza. Te traerá pensamientos suicidas). Pero hazlo de todos modos. Tómese su propio tiempo. Si es difícil, puede omitir este paso. pero vale la pena. Golpeará a la mierda fuera de tu ego.

4. Una vez completado el paso 3. Buscar en la red, Libros para mejores implementaciones.
———————————————————————————————————
Trate de entender por qué es mejor. Observar las mejores prácticas.
Ahora te das cuenta por qué llamamos a un Maestro un Maestro. Aquí es donde aprendes diferentes enfoques.

5. Repita 3,4 para varios años.
——————————————-

El algoritmo anterior parece un toro filosófico ***. Pero esta es la única manera que funciona para mí. He intentado muchas maneras desperdiciado mis años en otros métodos.

Por ejemplo:
———-
Cuando aprendo fusionar ordenar. Me tomó alrededor de 5 semanas. Pero aprendí el tipo Merge, K – Way Merge. Clasificación de 5 GB de archivo usando clasificación externa, manipulación de archivos aprendida en C, etc., operación inteligente para acelerar el cálculo de promedios. Se implementó la ordenación de fusión en OpenCL (GPU), se estudiaron técnicas de optimización, etc. Y disfruté mucho sin sentimientos negativos. Algunas veces me salté el paso 3. pero estaba bien romper una regla. 😉

Esta forma de aprender me brinda alegría, tristeza, depresión, felicidad, todo el yin y yang en mi vida.

Pero mi habilidad para codificar es como el cielo se disparó desde entonces.

No soy un gran chico, pero este método funciona para mí.

Adquirir una gran habilidad como algoritmos, compiladores, gráficos de computadora, inteligencia artificial es una habilidad que dura toda la vida. nunca llegarías en poco tiempo.

Pero vale la pena. Solo disfruta el viaje.

PD
Si ustedes encuentran algún método que funcionó mejor que el mío, hágamelo saber.

Aquí hay algunas cosas que puedes probar

  • Analice detenidamente lo que se implementa en c ++ stl .
  • Implementa todos los algoritmos que hayas aprendido de tantas maneras como sea posible.
  • Como dijiste que la implementación es tu principal problema, puedes estar arruinando los casos de esquina . Ten cuidado con ellos
  • Intenta resolver los archivos del concurso de Codeforces . Pasa un tiempo en cada uno de ellos y luego mira los editoriales. Esto ayudará mucho si planea tomar ACM ICPC.
  • También puede probar los tutoriales y concursos de algoritmos de TopCoder .

Es posible que desee revisar la segunda mitad de mi respuesta con otra pregunta: la respuesta de Sai Teja Pratap a ¿Dónde puedo encontrar problemas difíciles de algoritmo / estructura de datos?

Aquí hay algunos sitios útiles para practicar la programación algorítmica.

  1. HackerRank (anteriormente http://www.interviewstreet.com )
    • Preguntas no tan fáciles, la mayoría de ellas son desafiantes.
    • Resolver una pregunta requiere múltiples conceptos.
    • Las empresas vienen a contratar a través de codesprints enviewstreet.
  2. Juez de Esfera Online (SPOJ)
  3. Codechef
    • Contiene preguntas de todos los niveles.
    • Habrá concursos mensuales.
  4. http://algomuse.appspot.com/archive
    • Realizan concursos que no son de programación de vez en cuando (puede ser alrededor de 3 meses)
    • Preguntas moderadas y difíciles.
  5. http://community.topcoder.com/tc
    • Muy buena comunidad.
    • Tutoriales de alta calidad.
    • Habrá alrededor de 2 concursos por mes.
    • Contiene preguntas de todos los niveles (archivos).
  6. http://www.codeforces.com
    (similar a topcoder)
  7. projecteuler.net
    • Contiene muchas preguntas fáciles al principio. Pero las preguntas después del 200 son desafiantes.
    • Se puede comenzar con esto (preguntas numeradas <100) y pasar a otros sitios una vez que él / ella obtenga confianza.

Saber lo básico del lenguaje y los algoritmos es genial, pero a menos que practiques, será muy difícil codificarlo.

Cuando empieces a practicar, sabrás cómo reunir 1 y 1 para que sea 2.

Comience con preguntas simples y codifíquelas usted mismo. Luego pasa a las preguntas con mayor nivel de dificultad.

Lea una pregunta, piense en cómo abordar el problema. Puede ser la solución más ingenua, pero aún así codificarla. Si puede codificarlo y probarlo bien, entonces piense en una mejor solución. En caso de que no pueda pensar en una solución mejor, busque una solución en Internet, pero no mire el código. Ir a través del algoritmo. Ahora, si lo entiendes, intenta codificarlo tú mismo. Si le resulta difícil codificar, entonces solo mire el código. Después de eso intenta codificarlo tú mismo.

Practica más y más preguntas. No se rinda si al principio puede resolver el problema de manera eficiente usted mismo.

Intente resolver las preguntas de entrevista popular sobre arrays, programación dinámica, árboles, gráficos, etc.

Puedes intentar resolver los problemas dados aquí: IDeserve

Si no puede resolver algún problema, consulte los Algoritmos / Información en la página para obtener una pista sobre la solución. Si necesita más ayuda sobre el problema, probablemente encontrará un video sobre la solución. Muchas de las páginas tienen una solución de video en la que se discute el algoritmo con ejemplos. Por último, puedes echar un vistazo al código. Aunque el código está en Java, podrá escribir código c ++ similar si tiene conocimientos básicos de Java.

Puedes comenzar con esta lista de reproducción:

Youtube – Preguntas de la entrevista de programación

Éstos son algunos de los buenos problemas que puede probar:

Listas enlazadas y problemas de pila:

Fusionar dos listas enlazadas ordenadas

Invertir una lista enlazada – Recursiva

Invertir una lista enlazada – Iterativa

Invierta todos los nodos k alternativos de una lista enlazada

Encuentre el nth Node desde el final de una lista enlazada

Suma de dos listas vinculadas usando pilas

Suma de dos listas vinculadas utilizando Recursión | Serie 1

Implementación de caché LRU

Detecta un bucle en una lista enlazada y encuentra el nodo donde comienza el bucle.

Convertir una lista ordenada de enlace doble en un árbol de búsqueda binaria equilibrada

Convertir un árbol binario en una lista doblemente enlazada

Encuentra la intersección de dos listas vinculadas

Encuentre la intersección de dos listas vinculadas: O (m + n) Complejidad de tiempo y O (1) Complejidad de espacio

Pila Mínima O (1)

Problemas con las cuerdas:

Invertir palabras en una cadena

Eliminar espacios de una cadena dada

Subcadena más larga con caracteres que no se repiten

Compruebe paréntesis equilibrados en una cadena

Evaluación de Expresión Postfix

Agrupe todos los anagramas de una determinada serie de cadenas | Serie 1

Primer carácter no repetitivo en una cadena.

Encuentra todas las permutaciones de una cadena

Problema de ruptura de palabras

Subconjunto del problema de suma

Palíndromo más corto

Palindrome Min Cut

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

La subcadena palindrómica más larga

Algoritmo de Manacher

Secuencia palindrómica más larga

La subcadena común más larga

La subsecuencia común más larga

Para imprimir el número máximo de Como usando cuatro claves dadas.

Encontrar secuencias de ADN repetidas de 10 letras.

Encuentra la distancia de edición mínima entre dos cadenas dadas

Distintas cadenas binarias de longitud n sin 1s consecutivos

El cálculo de matriz de sufijo de prefijo más largo en el algoritmo de coincidencia de patrones KMP.

El algoritmo de Knuth Morris Pratt para la comparación de patrones.

Arreglos de problemas:

Algoritmo de clasificación – Selección de selección

Algoritmo de clasificación – Ordenación por inserción

Algoritmo de clasificación – Bubble Sort

Fusionar clasificación

Clasificación de panqueques

Algoritmo de clasificación – Ordenación de pila

Girar una matriz

Número de Fibonacci

Combina dos matrices ordenadas sin usar espacio adicional

Suma máxima de subarreglos

Subarreglo promedio máximo de tamaño k

Subcadena más larga con caracteres que no se repiten

Líderes en una matriz

Encontrar la longitud mínima de sub array con suma K

Búsqueda binaria en una matriz ordenada

Busca una matriz ordenada

Reorganizar los elementos en una matriz para poner los elementos positivos y negativos en orden alterno

Encuentra el siguiente número mayor usando los mismos dígitos

Siguiente elemento mayor en una matriz

Primer carácter no repetitivo en una cadena.

Encuentra el ‘n’ número más frecuente en la matriz

Encuentra el número que falta en la secuencia creciente

Encontrar duplicados en una matriz entera

Encuentra elementos comunes en ‘n’ arreglos ordenados

Encuentra un elemento pico en una matriz

Distribuir problema de chocolates

Contar las frecuencias de los elementos de la matriz en el rango de 1 a n

Encuentra todas las permutaciones de una cadena

Encuentra pivote en una matriz rotada ordenada

Encuentra un elemento en una matriz rotada ordenada

Encuentre el elemento en la matriz rotada clasificada sin encontrar pivote

Compra y venta de acciones | Parte 2

Compra y venta de acciones | Parte 1

Encuentra el índice de 0 para reemplazar para obtener la secuencia continua más larga de 1s

O (n) enfoque de tiempo para encontrar el índice de 0 para reemplazar y obtener la secuencia continua más larga de 1s

Atrapando el agua de lluvia entre torres

El problema del horizonte

Número mínimo de monedas para hacer cambio.

Encuentra la ruta de costo mínimo en una matriz

Encuentra la longitud de la subsecuencia creciente más larga en una matriz

Secuencia creciente más larga O (n logn)

Encuentra la longitud de la subsecuencia bitónica más larga en una matriz

Dada una matriz con todos los elementos distintos, encuentre la longitud de la sub-matriz más larga que tiene elementos (no en ningún orden en particular) que podrían formar una secuencia contigua

Encuentre una matriz de enteros correspondiente a la cadena que especifica las transiciones de aumento y disminución

Problema de la mina de oro

Encuentra la mediana de dos matrices ordenadas

Encuentra el elemento mayoritario en una matriz

0-1 Problema de mochila

Contar todas las decodificaciones posibles de una secuencia de dígitos dada

Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

Encuentra sub-secuencia creciente de longitud tres con producto máximo

Encuentra sub-secuencia creciente de longitud tres con producto máximo | Enfoque optimizado

Establecer problema de partición | Recursion

Establecer problema de partición | Programación dinámica

Problemas de árboles y gráficas:

Previa pedido de un árbol binario

Recorrido posterior de un árbol binario

En orden de travesía de un árbol binario

Nivel de árbol binario Orden transversal

Recorrido de orden de nivel espiral de un árbol binario | Serie 1

Imprimir la vista derecha de un árbol binario

Imprima todos los nodos de un árbol binario que no tengan hermanos

Imprimir todos los caminos de la raíz a la hoja de un árbol binario

Profundidad mínima de un árbol binario

Imprimir la vista izquierda de un árbol binario

Encuentra la suma de todas las hojas izquierdas de un árbol binario.

Encuentra la profundidad del nodo de hoja impar más profundo

Compruebe si un árbol binario es un árbol binario completo o no

Compruebe si un árbol binario está completo o no

Compruebe si dos nodos son primos en un árbol binario

Compruebe si dos árboles binarios son idénticos

Compruebe si todos los nodos internos de BST tienen un solo hijo sin árbol de construcción

Convertir el árbol n-ary dado a su imagen de espejo

Convertir un árbol binario a su árbol espejo.

Imprimir vista superior de un árbol binario

Imprima la vista superior de un árbol binario utilizando el orden de nivel transversal

Imprimir vista inferior de un árbol binario

Imprima la vista inferior de un árbol binario utilizando el orden de nivel transversal

Eliminar los nodos del árbol de búsqueda binario que están fuera del rango dado

Eliminar todos los nodos que se encuentran en la ruta con una suma menor que k

Eliminar todos los medios nodos de un árbol binario dado

Imprimir árbol binario en orden vertical

Rellenar vecinos correctos para todos los nodos en un árbol binario

El ancestro común más bajo de dos nodos en un árbol de búsqueda binario

Sucesor en orden de un nodo en un árbol binario

Recupere un árbol de búsqueda binario si se intercambian las posiciones de dos nodos.

Encuentre el piso y el techo de un elemento a partir del conjunto de datos dado utilizando el árbol de búsqueda binario

Suma diagonal de un árbol binario.

Crear un árbol de búsqueda binario equilibrado a partir de una matriz ordenada

Convertir una lista ordenada de enlace doble en un árbol de búsqueda binaria equilibrada

Convertir un árbol binario en una lista doblemente enlazada

Compruebe si un árbol binario está equilibrado o no

Compruebe si un árbol binario es un árbol de búsqueda binario

Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz | Conjunto 2

Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz

Compruebe si un árbol binario es un subárbol de otro árbol binario en el tiempo O (n)

Compruebe si un árbol binario es un subárbol de otro árbol binario en el espacio O (1)

Árbol binario de búsqueda | Inserción y Búsqueda

Árbol binario de búsqueda | Supresión

Compruebe si un árbol binario dado es un árbol simétrico o no

Compruebe si el árbol n-ario dado es un árbol simétrico o no

Número total de posibles árboles binarios de búsqueda con las teclas ‘n’

Encuentra el tamaño de BST más grande en un árbol binario

El ancestro común más bajo de 2 nodos en un árbol binario

Encuentre la altura del árbol binario de su representación matriz matriz

Convertir árbol binario a árbol binario de búsqueda

Construye el árbol binario a partir de su representación matriz matriz

Construir árbol binario a partir de recorridos inorder y preorder

Construir árbol binario a partir de recorridos inorder y postorder

Árbol AVL | Lo esencial

Árbol AVL | Inserción

Árbol AVL | Supresión

Estructura de datos Trie | Insertar y buscar

Estructura de datos Trie | Borrar

Ajuste de patrones utilizando Trie

Coincidencia de prefijos más larga utilizando Trie

Dada una secuencia de palabras, agrupa todos los anagramas e imprímelos.

Serializar y Deserializar un árbol binario de búsqueda

Serializar y deserializar un árbol de búsqueda binario utilizando el recorrido de orden posterior

Amplia primera búsqueda en una gráfica.

Clasificación topológica de una gráfica acíclica dirigida.

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

Problema de círculos de amigos – Teoría de grafos

El algoritmo de ruta más corta de Dijkstra

Algoritmo de Bellman-Ford

Problemas de programación dinámica:

Número de Fibonacci

Suma máxima de subarreglos

Problema de ruptura de palabras

Número total de posibles árboles binarios de búsqueda con las teclas ‘n’

Subconjunto del problema de suma

Palíndromo más corto

Palindrome Min Cut

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

Número mínimo de monedas para hacer cambio.

Encuentra la ruta de costo mínimo en una matriz

La subcadena palindrómica más larga

Secuencia palindrómica más larga

Encuentra la longitud de la subsecuencia creciente más larga en una matriz

Secuencia creciente más larga O (n logn)

La subcadena común más larga

La subsecuencia común más larga

Encuentra la longitud de la subsecuencia bitónica más larga en una matriz

Para imprimir el número máximo de Como usando cuatro claves dadas.

Problema de la mina de oro

Encuentra la distancia de edición mínima entre dos cadenas dadas

0-1 Problema de mochila

Distintas cadenas binarias de longitud n sin 1s consecutivos

Contar todas las decodificaciones posibles de una secuencia de dígitos dada

Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

Establecer problema de partición | Programación dinámica

Una vez que tenga una buena práctica en las preguntas, puede intentar resolver tantos problemas como pueda en:

Problemas | LeetCode OJ

Juez de Esfera Online (SPOJ)

Dése desafíos diarios a partir de objetivos fáciles.

Por ejemplo:

Semana 1: objetivo fácil – 1 pregunta por día

Semana 2-3: 2 preguntas por día.

Al final de las 3 semanas, habrías completado 35 preguntas y cultivado el hábito de codificar todos los días.

Sigue practicando .. Todo lo mejor!

Espero que esto ayude.

Para poder entender y resolver problemas, necesitas:

  1. Aumente el conocimiento de las estructuras de datos : este aprendizaje de varios DS es aún más importante, ya que todavía no puede codificar, lo cual está bien. Entender sus complejidades de tiempo y espacio será bueno aquí.
  2. Luego, Aumente el conocimiento sobre los algoritmos : Después de hacer el punto # 1, ahora puede pensar de esta manera: “sí, puedo usar esa estructura de datos aquí”, que volverá a resolver sus algoritmos antes.
  3. Concéntrese más tiempo en aprender nuevos DS y A (arriba) , no en resolver incógnitas durante días, ya que podría perder más tiempo. Brisa a través de la estructura de datos y algoritmos (DSA) Tutorial

No se pierda las sugerencias en los puntos anteriores, vuelva a leer según sea necesario.

Espero que haya ayudado.

La mejor de las suertes.

Recomendaría encarecidamente al juez de Pekín en línea ( http://poj.org/ )

Hay miles de problemas algorítmicos, y puede enviar su código. Puede comprobar inmediatamente si su solución está bien o no. Su código debería 1) producir la salida correcta Y 2) lo suficientemente rápido.

Este recurso se usó realmente en una de las clases de Stanford (CS 97SI) para enseñar habilidades de codificación algorítmica. Aprendí mucho de ello.

Puede utilizar el idioma de su elección, incluido C ++.

Además, puede medir la dificultad de cada problema leyendo las estadísticas: qué porcentaje de envíos fueron correctos, cuántos resolvieron el problema, etc.

Espero que haya ayudado!

Hay 2 formas de mejorar:

1. Práctica: intente resolver las preguntas con un alto número de presentaciones correctas en jueces en línea como SPOJ y UVa. Es como las matemáticas: cuanto más practicas, mejor te vuelves. Comenzarás a entender mejor los problemas.

2. Aprender: en algún momento, debe comenzar a aprender nuevos algoritmos, recomendaría tomar un curso en línea o leer Introducción a los algoritmos de CLRS (que son 4 autores). Tomé un curso en línea de Stanford y lo encontré muy útil. Aquí está el enlace: https://www.coursera.org/course/… .

Uno necesita equilibrar la práctica y el aprendizaje, aprender un nuevo algoritmo, practicarlo hasta que adquiera confianza, aprender otro. También recomendaría participar en concursos organizados por Codechef (especialmente el desafío largo) y Codeforces.

De la escuela … ¿eh?

¡Ser un buen programador de la escuela en sí mismo se verá recompensado en toneladas!

y esta leyenda (RIP) que revolucionó Internet y aún es recordada ampliamente por su tremenda personalidad, sus logros y su idealismo.

La programación debe iniciarse lo antes posible. Si tuviera que retroceder en el tiempo cuando tenía tu edad y me pidiera comenzar a programar, este es quizás el plan de trabajo que me proporcionaría. Este programa se divide en fases que deben completarse una después de la otra. Supongo que no hay conocimientos de programación de su parte al principio.

—————————— TU GUÍA DE ENTRENAMIENTO ——————————

FASE 1 :: LUZ, INTERESANTE Y FÁCIL

PARTE A- Video conferencias de MyCodeSchool DS

-> Para el conocimiento práctico y la comprensión intuitiva de temas básicos

-> Los videos son altamente trabajados en términos de información tecnológica y experiencia de usuario.

-> El narrador Animesh Nayan ha hecho un gran trabajo explicando las cosas tomando ejemplos de la vida real y señalando los errores comunes que hacen los principiantes.

-> Uno de los co-fundadores de esta startup fue una vez el codificador de India (humblefool). Para que pueda estar seguro de la máxima calidad.


PARTE BProblemas de dominio HackerRank DS

=> Complementar la PARTE A resolviendo algunos ejercicios de codificación relacionados con DS aquí Subdominio de estructura de datos de HackerRank

=> Muchos de ellos también están diseñados por la misma gente en MyCodeSchool y están destinados a ser seguidos simultáneamente con las conferencias de video


FASE 1.5 :: OPCIONAL

=> Estructuras de datos y algoritmos simplificados por Narasimha Karumanchi Lo bueno de este libro es que es divertido hacerlo.

=> Te permite dejar las matemáticas rigurosas que te chupan la sangre para más tarde.

=> Esta será una gran prueba de su comprensión de la FASE 1


FASE 2 :: IR A PROFUNDIDAD

NPTEL IIT-D Video Conferencias

-> Creo que estas conferencias son más exhaustivas y comprensibles que MIT OCW

=> Omita los primeros 3 videos de la serie (ya ha cubierto todo lo que se enseñó durante la fase 1)

=> Al completar la Fase 2, ya has cubierto todos los temas básicos de DS con teoría y tienes una buena cantidad de experiencia práctica en codificación

FASE 2.5 :: OPCIONAL Ravindra Babu Ravula

-> Echa un vistazo a sus conferencias para el aprendizaje orientado GATE. Son un buen suplemento.


FASE 3 :: TEORÍA RIGOROSA Y CODIFICACIÓN CONSISTENTE

PARTE A :: Entrevista

=> Un ★★★★★ programa de preparación para entrevistas con estrellas

=> Adictivo, divertido y, a la vez, prometedor. También podría ser el futuro de la programación de aprendizaje.


=> InterviewBit usa el concepto de Gamificación para fomentar el aprendizaje.

=> La plataforma está interconectada con Facebook, por lo que puede ver el rendimiento de sus amigos e infundir una sensación de competitividad. Incluso puedes seguir a una persona que no está conectada a través de Facebook también.

=> Lo mejor de IB es el concepto de nivel y racha completa. Necesitas alcanzar cierto número de puntos todos los días para mantener una racha, de lo contrario se reduce a la mitad. Y puede pasar al siguiente nivel solo si ha completado lo esencial de ese nivel.


PARTE B::

(I) GeeksforGeeks

=> El mejor sitio web para todo tipo de problemas de práctica en DS con una buena explicación y código limpio + completo.

=> Suplemento con GeeksQuiz para mayor práctica => Se puede usar como referencia


(II) codificador superior

Competiciones en línea de programación de computadoras en los lenguajes Java, C ++ y C #. Las competiciones se llevan a cabo dos veces por semana, y los miembros pueden ganar de $ 25 a $ 300.

Tipos de competiciones

  • Algoritmos (duración de la competencia de aproximadamente dos horas): A los competidores se les da un conjunto (generalmente tres) de problemas algorítmicos y tienen 75 minutos para resolver correctamente tantos como puedan.
  • Diseño de software (duración de la competencia de una semana): los competidores reciben un conjunto de requisitos del usuario e intentan convertirlos en una especificación de diseño de software utilizable. Sus esfuerzos se juzgan según una variedad de criterios del “mundo real” sobre la forma correcta y práctica de su diseño.
  • Desarrollo (duración de la competencia de una semana): los competidores reciben un conjunto de especificaciones de diseño e intentan escribir componentes de software que coincidan con esta especificación. Estos componentes son juzgados por su funcionalidad y estilo de codificación.
  • Partidos de maratón (duración de la competición una o dos semanas): los participantes tienen un problema algorítmico particularmente difícil. La puntuación se realiza por computadora en base a criterios específicamente adaptados al problema.
  • Estudio (diseño gráfico): los concursantes deben mostrar sus habilidades creativas en un entorno competitivo.
  • Architecture Assembly TopCoder ha creado concursos de ensamblaje como una extensión de los concursos de diseño y desarrollo de componentes. A través de estas competiciones, los competidores crean aplicaciones de alta calidad utilizando componentes completos y el método competitivo establecido por TopCoder.
  • Pruebas
  • Razas de errores Los equipos, clientes y miembros del Proyecto pueden registrar los errores que encuentran en el software desarrollado y soportado por TopCoder. TopCoder comunicará estos errores a la comunidad miembro. Los errores que están abiertos a la comunidad se publicarán en la página Razas de errores activos.

(III) Codeforces

Codeforces proporciona los siguientes servicios principales a todos los usuarios:

  • la participación en los concursos cortos (2 horas), los llamados “Codeforces Rounds”, que se realizan una vez a la semana;
  • participación en concursos educativos (1.5-2.5 horas), realizados 2-4 veces por mes
  • desafiar / hackear soluciones de otros concursantes;
  • capacidad para resolver problemas de concursos anteriores con fines de entrenamiento;
  • “polígono” para crear y probar problemas;
  • Tipo de redes sociales mediante el uso de blogs públicos internos.

(III) OTROS

1. Codechef: concurso de programación, concurso de programación, programación de computadoras en línea

2. SPOJ – Sphere Online Judge (SPOJ)

3. UVa – Juez en línea de UVa – Inicio

4. ProjectEuler – Proyecto Euler

5. Desafíos de programación – Desafíos de programación

6. ahmed-aly – Concursos virtuales en línea

7. Juez en línea de TJU – TJU ACM-ICPC

8. PJU – UNION PANAMERICANA DE JUDO

9. USACO – Pasarela del programa de capacitación de USACO

10. TIMUS – Timus Juez en línea

11. AIZU – Desafío de programación

12. URI – Juez en línea URI – Iniciar sesión

13. ZOJ – ZOJ :: Inicio

14. NTHU – Juez en línea de NTHU

15. Leetcode – LeetCode

16. AI Challenge – Inicio | Desafío de IA

17. Saratov – Universidad Estatal de Saratov :: Participante en línea

18. Atasco de código de Google – Atasco de código de Google

19. InterviewStreet – Concursos de programación – Codesprints – Interviewstreet

20. Kaggle: hacer de la ciencia de datos un deporte.

21. Herbert – Bienvenido a Herbert Online Judge

22. CoderCharts – CoderCharts – Social Meets Programming

23. PKU – Bienvenido a PKU JudgeOnline

24. CodingBat – CodingBat

25. Programr – Programr | Aprender.Código.Compartir

26. HackerRank – Desafíos de la inteligencia artificial :: Problemas y competencias de programación de AI :: HackerRank

27. Al Zimmermann – Concursos de programación de Al Zimmermann

28. Light OJ- Página en lightoj.com

Si las cosas parecen difíciles, entonces comienza desde aquí primero

=> Juez de PEG – 2048


PARTE C: Creo que esta gran preparación es suficiente para domesticar a la Bestia más enervante del Diablo en una cantidad razonable, es decir.

Capítulo 1: Puede elegir ignorar el capítulo 1 o hojearlo.

Capítulo 2: Sólo lectura 2.1 y 2.2.

Capítulo 3: Si eres principiante, puede que no te guste este capítulo. Entonces, solo lee 3.1. Revisar a través de 3.2

Capítulo 4: Para el primer temporizador, está bien leer sólo 4.1, 4.3, 4.4 y 4.5 y dejar el resto.

Capítulo 5: Puedes saltarte esto como un primer temporizador.

Capítulo 6: Todo es muy importante, lea todas las secciones.

Capítulo 7: Puede omitir la sección 7.3, pero asegúrese de leer las otras secciones detenidamente

Capítulo 8 y 9: Puedes dejar estos capítulos al principio.

Capítulo 10: Todas las secciones de este capítulo son obligatorias y deben leerse.

Capítulo 11: Puedes saltarte la sección de Hashing perfecto (11.5)

Capítulo 12 y 13: Por favor, no omita nada en estos capítulos.

Capítulo 14: Salta esto si eres el primer contador de tiempo.

Capítulo 15: Le encantará este capítulo. La sección de LCS puede parecer complicada, pero si es posible, intente leer esto dos veces.

Capítulo 16: Solo lectura 16.2, 16.2 y 16.3

Capítulo 17: Salta esto por primera vez.

Capítulo 18, 19, 20 y 21: Omita todos estos capítulos. Capítulo 22: Puede optar por omitir la sección 22.5 (Componentes fuertemente conectados)

Capítulo 23: Todo en este capítulo es importante y debe leerse la primera vez.

Capítulo 24 y 25: Estos deben ser leídos

Capítulo 26: Puedes saltarte esto, no es muy importante para empezar.

Capítulo 27 en salas: no para empezar, una vez que tenga una buena mano sobre los capítulos hasta aquí, siempre puede elegir qué leer de los capítulos restantes según su interés.

==> Pero si vas a un desafío de CUBIERTA A CUBIERTA (es decir, implementar cada algoritmo, entender cada prueba, etc.), estos cuatro caballeros pueden tener piedad de tu alma.


PARTE D :: Libros de preparación para la entrevista:

Cracking the Coding Interview :: LA BIBLIA DE LA PREPARACIÓN DE LA ENTREVISTA

=> Este libro le brinda la preparación para la entrevista que necesita para obtener los mejores trabajos de desarrollador de software.

=> Se enfoca en las habilidades de ingeniería de software utilizando 150 preguntas y respuestas para la entrevista de programación, así como otros valiosos consejos.

=> El autor es un ex ingeniero de software y ha trabajado en Google, Microsoft y Apple. También ha estado en el otro lado de la mesa, contratando candidatos para estas compañías principales y, por lo tanto, tiene información valiosa sobre lo que sucede y cómo prepararse para ello.

=> Un sitio web relacionado es CareerCup, que es un foro de discusión donde puede encontrar una variedad de preguntas de varias compañías. Tiene una buena colección de preguntas ya que es antigua (fundada en el año 2005)


OPCIONAL :: HACER MEJOR USO DE INTERNET

Puede seguir a algunos programadores, autores e ingenieros de software profesionales conocidos para obtener consejos, consejos, trucos o aprender de su código.

1) Programadores competitivos: 🙁 Sin ningún orden en particular)

  • Turista (programador competitivo) Gennady Korotkevich
  • Michal Forišek (misof en Topcoder)
  • Bohdan Pryshchenko (I_love_Tanya_Romanova – Codeforces)
  • Michal Danilák (Mimino en Topcoder)
  • Przemysław Dębiak (psyho en Topcoder)
  • Neal Wu (neal_wu en Topcoder)
  • Johnny Ho (codeforces.comrandom.johnnyh – Codeforces)
  • Quora Usuario
  • Mark Gordon (msg555 en Topcoder)
  • Egor Suvorov (yeputons en Topcoder)
  • Brian Bi
  • Anudeep Nekkanti
  • Petr Mitrichev (programador competitivo)
  • ACRush (Tiancheng Lou) CodeChef Usuario | CodeChef
  • Djdolls (Ajay K. Verma) CodeChef Usuario | CodeChef
  • Lalit Kundu
  • Anshuman singh
  • Triveni Mahatha

2) Desarrolladores profesionales de software ::

Jon Skeet

  • Él es el maestro de las bibliotecas del tiempo.
  • Él tiene la puntuación más alta de todos los tiempos en StackOverflow.
  • Él es el mismo para la programación que Chuck Norris para combatir el crimen. Más sobre esto aquí: hechos de Jon Skeet
  • Autoridad en C #.
  • > 32000 respuestas StackOverflow
  • Tiene un inmenso respaldo de parte de la comunidad.

Mariya Mykhailova Desarrollador de software, principalmente interesado en algoritmos y lenguajes de programación.

Especialidades: SQL, Oracle SQL, C ++, algoritmos, escritura de problemas: http: //www.linkedin.com/in/mari…

Jonathan Kang

Jonathan es un diseñador de CPU en Nvidia (dice su perfil, al menos). Brillante con cualquier cosa en el nivel de la arquitectura, realmente aprendo muchas cosas de sus respuestas.

Anders Kaseorg

Creo que Anders es lo que podríamos llamar coloquialmente como un genio. Dos cosas de las que tiene mucho conocimiento son Python y matemáticas. Eso no es demasiado sorprendente dados sus logros: tiene una SB en matemáticas del MIT y cofundó una startup (K-Splice) que fue comprada por Oracle. Me gustaría que publicara más sobre cosas a nivel de sistemas (es decir, Linux principalmente). De hecho, me gustaría que publicara más periodo. Actualización : verlo publicar más en C y C ++, que son mis propios idiomas de elección. También olvidé mencionar la última vez que responde muchas preguntas de algoritmos y todas son brillantes. Muy simples, claras explicaciones.

Robert love

El hacker de Linux que trabaja para Google, primero en el kernel de Android y ahora en la infraestructura de búsqueda web, también escribió un buen libro sobre el kernel de Linux. Mi única queja sobre Robert es que no publica más en Quora. Actualización : en estos días veo a Robert publicar mucho más y estoy aprendiendo más que nunca. Entre Robert y Anders, realmente obtengo muchas cosas sobre la programación C y el kernel de Linux, y es fantástico.

Quora Usuario

Hacer un doctorado en automatización de diseño electrónico, algo de lo que no sé mucho ni conozco a mucha gente que lo haga, pero es un tema muy importante. Sabe mucho sobre arquitectura, buenos consejos sobre el campo y sobre la escuela de posgrado en general. Su actividad es excelente, encuentra cosas que no puedo, así que es un buen negocio.

Cameron purdy

Recientemente he seguido a Cameron, pero al observar su actividad pasada, parece muy informativo con respecto a Java, sistemas distribuidos y bases de datos. Trabaja para Oracle, por lo que sus áreas temáticas parecen adecuadas. EDIT: Solo para agregar, él fue un fundador de inicio (Tangosol) y se vendió a Oracle. Gracias Miguel por la distinción en los comentarios.

Joshua Engel

Por lo que recuerdo haber leído sobre él, es programador durante el día y casi todo lo demás por la noche, y puedes verlo por su actividad en Quora. De hecho, publiqué un comentario sobre cómo él no publica lo suficiente en el software, pero me indicaron que sí y que no lo había visto en el mismo volumen relativo que otras personas a las que sigo desde que Josh está activo en tantos temas diferentes. Sin embargo, si busca sus respuestas en el software, son de hecho muy perspicaces y claras. También me gustaría agregar que Joshua es una persona divertida a seguir en general, no solo para CS / software.

Anthony Yeh

Estudiante de doctorado en Berkeley en el EECS (su lema dice optoelectrónica, así que supongo que EE). Conocedor en áreas generales de computadoras, y algunas áreas más específicas también. También mensajes sobre temas de la escuela de posgrado. Otra persona que me gustaría publicar más. También, creo, un 2012 Quora Top Writer (¡felicidades!).

Greg Pfister

Arquitecto de computadoras retirado, solía trabajar en IBM. Escribió un libro llamado In Search Of Clusters y está muy bien informado sobre la arquitectura de todas las computadoras. Ojalá él también publicara más, dada su experiencia en el campo.

Dan Zhang

Estudiante de doctorado en ingeniería informática en UT Austin (una de las mejores escuelas de CS, si se lo estuviera preguntando). Una buena persona para seguir en general, y escribe publicaciones en la escuela de posgrado, así como cosas relacionadas con su propio campo. Un poco terso a veces (mi preferencia es respuestas más largas), pero admito que a veces es necesario. Ciertamente, una persona a la que deberías considerar seguir, independientemente de tu preferencia, ya que da algunas respuestas genuinamente buenas.

Quora Usuario

Un estudiante de primer año de CS / Mecatrónica en la Universidad de Melbourne con intereses en finanzas, estadísticas y CGI. No responde muchas preguntas, pero la razón principal por la que lo sigo es debido a su junta directiva llamada Hardcore Engineering, donde publica algunas cosas fantásticas sobre software, idiomas y CS en general. Solo algunas cosas realmente, realmente de alta calidad, asegúrate de que las revises.

Jessica Su

Ashish Kedia


3) Si también está interesado en contribuir o aprender de proyectos de código abierto de buena calidad:

ENLACES DE GITHUB ::

Le sugeriría que leyera la introducción a los algoritmos de cormen y que también mire las conferencias sobre el mismo. Luego, puede comenzar a resolver problemas en spoj, codechef, topcoder, etc. Muchos de los sitios como topcoder y codechef tienen tutoriales que le ayudarán a abrir su Mente hacia la solución de tales problemas.

[Práctica y práctica] – Al elegir un problema y resolverlo de muchas maneras y de manera nueva, hacer que el código sea mejor. Me refiero a tratar de resolver el algoritmo con un mejor enfoque con complejidad de tiempo. Es difícil comenzar pero luego lo disfruta.

¿Tiene un problema para desarrollar el algoritmo o tiene un problema para codificarlo una vez que lo ha desarrollado?

(Si está intentando desarrollarlo codificándolo, eso es un problema. Desarrollélo en inglés, codifíquelo en un lenguaje de programación. No programa en C ++, programa en inglés, CODE en C ++. Tiene que ser capaz de pensar en cómo desarrollar el algoritmo, y los humanos no piensan en lenguajes de computadora.)

Para la visita en línea Coursera

Libro en la programación de computadoras – Compre el arte de la programación de computadoras, volúmenes 1-4A en caja (Juego de cajas) Reserve en línea a precios bajos en la India

resuelva cinco problemas en cada uno, analice la complejidad de tiempo / espacio para cada uno de los problemas:

  1. algoritmo codicioso
  2. divide y vencerás el algoritmo
  3. algoritmo dinámico
  4. algoritmos de cadena
  5. algoritmos de gráfico / árbol

Práctica. Comience desde la parte superior y trabaje hacia abajo:
http://acm.timus.ru/problemset.a…

Si tomó el curso Algorithms: Design & Analysis (Stanford University) en coursera, le sugiero que eche un vistazo a los Algorithms (Princeton University) en coursera. El curso de Stanford está orientado a la teoría y espera que los estudiantes puedan codificar algoritmos por su cuenta. Sin embargo, el curso de Princeton está orientado a la implementación y enseña la mejor manera de implementar varios algoritmos en Java.

Lee la biblia de la programación “Arte de la programación” por Donald Knuth

http://en.wikipedia.org/wiki/The

Tiene varios volúmenes pero vale la pena leerlo si quieres ser un maestro.

Cita a Bill Gates diciendo: “Si crees que eres un muy buen programador … lee Art of Computer Programming (de Knuth) … Definitivamente, deberías enviarme un currículum si puedes leerlo todo”.

Participa en el concurso de programación en sitios web como:

TopCoder, Inc. | Hogar de la comunidad de desarrollo más grande del mundo.
Codeforces
Concurso de Programación, Concurso de Programación, Programación Informática Online.

Buena suerte

La única forma es la práctica y la misma me ha beneficiado. Comience a practicar en SPOJ, apunte a algo nuevo y creo que la mejor manera de aprender algo es viendo los videos de YouTube. Me referí a los videos de Tushar Roy. Mire los videos y luego resuelva 3–4 preguntas basadas en ese algoritmo.

Todo lo mejor..!!

Aquí hay algunos consejos excelentes de codificadores de clase mundial; Las 10 mejores prácticas de los codificadores principales en Google, Pinterest y más

El proyecto Euler, Top Coder y los problemas de competencia de ICPC anteriores son probablemente buenos lugares para comenzar. Todos implican la resolución de problemas algorítmicos a través de la implementación.