¿Cómo puedo ser bueno en algoritmos si soy débil en matemáticas?

Es bueno tener conocimientos básicos de temas como permutación y probabilidad, ecuaciones diferenciales, inducción, teoría de números, etc. para comprender y diferenciar entre algoritmos. De hecho, diría que el CS teórico es parte de las matemáticas solamente, pero conocer cosas básicas sobre temas seleccionados a medida que llegan, sería capaz de programar variantes de dispositivos y algoritmos estándar.

Sugeriría los siguientes pasos.

  1. Elija un lenguaje de programación con el que esté familiarizado y sea minucioso con su sintaxis, semántica, paradigmas.
  2. Como eres un principiante, lee CLR detenidamente capítulo por capítulo. No se preocupe si no comprende parte de la parte de análisis de los algoritmos, ya que calculan la complejidad de ciertos algoritmos que requieren bastante matemática.
  3. Ahora elija un sitio de concurso / práctica de programación que tenga un juez en línea (como ACM o topcoder).
  4. Elija un paradigma o tema a la vez (ej. Divide y vencerás, programación dinámica, teoría de grafos, geometría computacional) y lea nuevamente esa porción de CLR.
  5. Ahora dedica días para resolver solo los problemas del sitio de práctica que se clasifican en el tema que acabas de leer.
  6. Elija un problema y pruébelo hasta que lo resuelva o esté agotado con las opciones.
  7. Si no puede resolverlo, busque en Google y lea solo la pista y vuelva a probar.
  8. Si aún no puede resolverlo, lea el pseudocódigo e intente programarse hasta que sea aceptado en línea.

9. Con experiencia y práctica, podrá visualizar qué algoritmo estándar puede modificarse para adaptarse al problema, qué paradigma seguir o cómo diseñar su propio algoritmo para el problema.

Esto requerirá mucha paciencia y tiempo. Diría que 6 meses es el mínimo (si es sincero y persistente) antes de comenzar a ganar confianza para abordar problemas aleatorios cuyo contexto aún no conoce.

Buena suerte.

Mejoré en CS simplemente resolviendo problemas de programación de sitios como Codeforces, Sphere Online Judge (SPOJ) y USA Computing Olympiad. El último sitio sería especialmente adecuado para su situación, ya que sus problemas son más algorítmicos que matemáticos, pero aún requieren una comprensión amplia y un uso innovador de algoritmos y estructuras de datos para resolverlos. Perfecto para desarrollar sus habilidades de programación basadas en CLRS.