¿Son problemas de algoritmo todos los problemas de programación? [cerrado]

13

Me gusta cómo "Introduction to Algorithms" de Cormen et al. transmite el conocimiento. Una razón es que todo tiene que ver con problemas de programación y el libro no se implementa en ningún lenguaje de programación en particular. Esta independencia del lenguaje proporciona un enfoque en las ideas en general.

Así que mi pregunta es, como se dice en el título. ¿Se pueden resolver todos los problemas de programación solucionable al pensar de esta manera algorítmica? No importa qué idioma, campo, etc? Si es así, da argumentos, de lo contrario, ¡da argumentos!

No he implementado muchos programas complejos con GUI, AI, Gráficos, etc ... Pero, ¿son estos tipos de problemas también una cuestión de pensar en buenos algoritmos?

    
pregunta Wittgenstein 22.08.2012 - 11:00

6 respuestas

29

Depende de cómo defina "Problema de programación".

En los proyectos del mundo real, la respuesta es definitivamente un NO claro. La mayoría de los problemas no son ni siquiera problemas técnicos, sino problemas de comunicación, requisitos que no están claros, etc.

Entonces tienes temas completos de clases de problemas que requieren casi ningún algoritmo. Por ejemplo, las GUI a menudo son sencillas de "programa", pero el problema real involucrado es tener un buen diseño (desde el punto de vista de la capacidad de uso, no solo la apariencia gráfica).

Hay algunos campos, donde 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 de algoritmo intensivo, pero depende de lo que se entiende exactamente con "Programación de gráficos".

En general, si el problema que está resolviendo mediante programación es adecuado para una representación matemática, entonces está ingresando al á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ías 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.

    
respondido por el Frank 22.08.2012 - 11:28
8

¿Qué quieres decir con problema de programación?

Según Wikipedia:

  

La programación informática (a menudo reducida a la programación o codificación) es el proceso de diseño, escritura, prueba, depuración y mantenimiento del código fuente de los programas informáticos.

lo que significa que la programación en general es intrínsecamente más grande 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 que ver con los algoritmos.

De la misma manera, 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 está asumiendo que en "problema de programación", "programación" es sinónimo de traducción de algoritmos a través del código, entonces sí, lógicamente cualquier problema sería un problema de algoritmo: A × n = B × n si A = B .

    
respondido por el Arseni Mourzenko 22.08.2012 - 11:25
6

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 C.S., especializándome en A.I.

Ahí el problema fundamental, al menos como lo veía, era encontrar buenas representaciones para obtener información. Estas representaciones deben tratar de coincidir con las estructuras de conocimiento que están en la cabeza de las personas y deben facilitar los tipos de manipulaciones y alteraciones que se realizan en ellas.

En términos de la programación del día a día, esto significa que el problema básico es identificar el lenguaje específico específico del dominio (DSL) para la situación actual. Hay muchas formas de crear DSLs. La programación ordinaria, donde se definen las clases, las variables y los métodos, en realidad está creando un DSL porque le permite decir cosas (asignar 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.

    
respondido por el Mike Dunlavey 22.08.2012 - 15:27
5

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 problemas más difíciles no se encuentran en la comunicación de un programa a una computadora, sino en la comunicación de un programa a personas que estarán probando y modificando 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 para que cualquier error se destaque como un pulgar adolorido.

Curiosamente, las cosas técnicas que aprendí en la universidad sobre los algoritmos han sido eclipsadas por lo que he aprendido 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.

    
respondido por el Karl Bielefeldt 22.08.2012 - 14:01
2

La mayoría de los problemas de programación son en realidad problemas de administración del sistema.

Esa es una respuesta frívola, pero he encontrado que esto es cierto más a menudo de lo que uno podrí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 que está saturando la CPU / memoria / puertos, el programa se está ejecutando con el ID de usuario incorrecto y por lo tanto tiene el error permisos, el disco se particionó incorrectamente y, por lo tanto, se agotó el espacio, se instaló la versión incorrecta del archivo de configuración, etc.

Por lo general, corregir los algoritmos es 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.

    
respondido por el Stuart Marks 22.08.2012 - 18:32
2

Pensaría que sí, todos los problemas de programación se pueden resolver pensando de forma algorítmica. Después de todo, un algoritmo es solo un conjunto de instrucciones que le indican a la computadora qué hacer.

Tomando algunos de los ejemplos de arriba

  

Por ejemplo, las GUI suelen ser sencillas de "programa", pero el problema real involucrado es tener un buen diseño (desde el punto de vista de la capacidad de uso, no solo la apariencia gráfica).

En términos de programación e incluso diseño, conocerá patrones / reglas que conducen a diseños de GUI efectivos que son 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

  

Para dar 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 que ver con los algoritmos.

Pero la manera en que se aproxima a la adición de pruebas unitarias se puede describir mediante un algoritmo como

  1. Identificar nueva prueba unitaria
  2. prueba de unidad de escritura
  3. Aplicar el algoritmo de normalización de mayúsculas
  4. Aplicar algoritmo de comentarios
  

Ejemplo: internacionalización   Este es un ejemplo perfecto de una solución de algoritmo. Como es lo más sencillo, busca una palabra conocida en un diccionario y la reemplaza con la forma de idioma diferente. (Por supuesto, la vida real involucra oraciones y contexto, y el algoritmo puede incluir pasos para verificar con hablantes nativos, pero los conceptos básicos son ciertos)

El problema con la mayoría de las respuestas Sí es que las personas están pensando en los algoritmos en términos de QuickSort, tipo de burbuja en lugar de un conjunto de instrucciones que reduce una descripción vaga detallada de un problema a un conjunto de reglas / lógicas claramente definidas.

    
respondido por el armitage 22.08.2012 - 18:39

Lea otras preguntas en las etiquetas