Me gusta cómo "Introducción a los algoritmos" por Cormen et al. transmite conocimiento. Una razón es que todo tiene que ver con problemas de programación y el libro no está implementado en ningún lenguaje de programación en particular. Esta independencia del lenguaje proporciona un enfoque en las ideas en general.
Entonces mi pregunta es, como dice en el título. ¿Se puede resolver cualquier problema de programación solucionable pensando de esta manera algorítmica? No importa qué idioma, campo, etc. En caso afirmativo, dar argumentos, de lo contrario, dar argumentos!
No he implementado muchos programas complejos con GUI, AI, Gráficos, etc. ¿Pero estos tipos de problemas también son una cuestión de pensar en buenos algoritmos?
algorithms
Wittgenstein
fuente
fuente
Respuestas:
Depende de cómo defina "Problema de programación".
En proyectos del mundo real, la respuesta es definitivamente un NO claro. La mayoría de los problemas ni siquiera son problemas técnicos, sino problemas de comunicación, requisitos que no están claros, etc.
Entonces tienes sujetos completos de clases de problemas que requieren casi ningún algoritmo. Por ejemplo, las GUI a menudo son fáciles de "programar", pero el problema real es tener un buen diseño (desde un punto de vista de uso, no solo la apariencia gráfica).
Sin embargo, hay algunos campos en los que los problemas tienden a ser mucho más algorítmicos por la naturaleza de ese campo. Por ejemplo, la IA es un tema principal, donde los algoritmos están en el núcleo. Los gráficos pueden ser intensivos en algoritmos, pero depende de lo que se quiere decir exactamente con "Programación de gráficos".
En general, si el problema que está resolviendo programáticamente es adecuado para una representación matemática, está entrando en el área algorítmica. Por supuesto, esto es solo un indicador aproximado, ya que puede crear modelos matemáticos para casi todo. Pero para la mayoría de las cosas, normalmente no considerarías hacerlo.
Ejemplo final: si el problema es crear una GUI que permita ingresar datos para objetos comerciales, no pensaría mucho en las formulaciones matemáticas. Sin embargo, si el problema es crear una GUI que cambie dinámicamente y reubique elementos en función de algún valor de importancia, es mucho más probable que termine con un modelo matemático y una implementación algorítmica.
fuente
i++
como nuestro nuevo señor supremo ... erm ... algoritmo.¿Qué quieres decir con problema de programación?
De acuerdo con Wikipedia:
lo que significa que la programación en general es inherentemente mayor que la traducción de algoritmos a través del código.
Para darle un ejemplo, un problema de programación que tengo ahora es que tengo que lidiar con un código fuente de espagueti heredado agregando pruebas unitarias y luego refactorizándolo . También implica agregar comentarios en los lugares correctos, normalizar el uso de mayúsculas en los nombres, etc. No tiene nada o poco que ver con algoritmos.
Del mismo modo, muchas tareas del desarrollador no están relacionadas con los algoritmos. Ejemplo: internacionalización. De la misma manera, muchas aplicaciones (CRUD, por ejemplo) no usan demasiado los algoritmos en su código fuente (sin hablar del código subyacente del marco).
Ahora, si asume que en "problema de programación", "programación" es sinónimo de traducción de algoritmos a través de código, entonces sí, lógicamente cualquier problema sería un problema de algoritmo:
A × n = B × n
siA = B
.fuente
Creo que la respuesta es enfáticamente no . Los algoritmos son solo bloques de construcción en un conjunto de habilidades mucho más grande.
Obtuve mi título en CS, especializándome en IA
Allí, el problema fundamental, al menos como lo vi, era encontrar buenas representaciones para la información. Estas representaciones deberían tratar de ser buenas coincidencias para las estructuras de conocimiento que están en la cabeza de las personas, y deberían facilitar los tipos de manipulaciones y alteraciones que se realizan en ellas.
En términos de programación diaria, esto significa que el problema básico es identificar el lenguaje específico de dominio (DSL) adecuado para la situación en cuestión. Hay muchas formas de crear DSL. La programación ordinaria, en la que se definen clases, variables y métodos, de hecho es crear un DSL porque le permite decir cosas (mapear sus estructuras mentales al código) que no podría decir sin ellas.
Los algoritmos también son importantes, pero son solo una parte de la historia.
fuente
Supongo que podría decir que todos los programas de computadora son algoritmos, porque está prescribiendo una secuencia de instrucciones para lograr el resultado deseado. Sin embargo, algunos de los más difíciles problemas no están en comunicar un programa a una computadora, sino en comunicar un programa a humanos que probarán y modificarán el software.
En otras palabras, a las computadoras no les importa si su código es completamente incomprensible para los humanos. Lo ejecutarán bien de cualquier manera. El desafío es hacer que el código sea lo suficientemente claro como para que cualquier error se destaque como un pulgar dolorido.
Curiosamente, las cosas técnicas que aprendí en la universidad sobre algoritmos han sido eclipsadas por lo que aprendí por mi cuenta desde entonces. En este punto, si quisiera obtener un tercer título universitario para ayudarme en mi trabajo, sería en composición en inglés.
fuente
La mayoría de los problemas de programación son en realidad problemas de administración del sistema.
Esa es una especie de respuesta frívola, pero he descubierto que esto es cierto con más frecuencia de lo que cabría esperar. No sé cuántas veces he encontrado fallas porque el DNS estaba mal configurado en la máquina de prueba, todavía se está ejecutando un proceso obsoleto que está acaparando la CPU / memoria / puertos, el programa se está ejecutando con la identificación de usuario incorrecta y, por lo tanto, tiene el error permisos, el disco se particionó incorrectamente y, por lo tanto, se agotó el espacio, se instaló una versión incorrecta del archivo de configuración, etc.
Conseguir los algoritmos correctos suele ser solo una pequeña parte del problema. El resto del problema es poner el programa a trabajar para resolver problemas reales en el mundo real.
fuente
Creo que sí, todos los problemas de programación se pueden resolver pensando de manera algorítmica. Después de todo, un algoritmo es solo un conjunto de instrucciones que le dice a la computadora qué hacer.
Tomando algunos de los ejemplos de arriba
En términos de programación e incluso diseño que conocerá patrones / reglas que conduzcan a diseños de GUI efectivos que sean fáciles de usar y eficientes. Estas reglas se reducen a un algoritmo que, si se sigue, debería ayudar a producir una GUI fácil de usar. De hecho, los pasos reales de colocar los controles en la GUI también se pueden reducir a un algoritmo
Pero la manera en que se acerca a agregar pruebas unitarias puede describirse mediante un algoritmo como
El problema con la mayoría de las respuestas de Sí es que las personas están pensando en algoritmos en términos de QuickSort, Bubble sort en lugar de un conjunto de instrucciones que reduce una descripción vaga y detallada de un problema a un conjunto de lógica / reglas claramente definidas.
fuente