Мне нравится, как «Введение в алгоритмы» Cormen et al. передает знания. Одна из причин заключается в том, что все связано с проблемами программирования, и книга не реализована на каком-либо конкретном языке программирования. Эта языковая независимость позволяет сосредоточиться на идеях в целом.
Так что мой вопрос, как говорится в названии. Каждая решаемая задача программирования разрешима, думая таким алгоритмическим способом. Неважно, какой язык, поле и т. Д.? Если да, дайте аргументы, иначе, дайте аргументы!
Я не реализовывал много сложных программ с графическим интерфейсом, AI, графикой и т. Д. Но являются ли проблемы такого типа вопросом хороших алгоритмов?
algorithms
Витгенштейн
источник
источник
Ответы:
Это зависит от того, как вы определяете «проблему программирования».
В реальных проектах ответ однозначно НЕТ. Большинство проблем - это даже не технические проблемы, а проблемы со связью, неясные требования и т. Д.
Тогда у вас есть целые предметы проблемных классов, которые почти не требуют алгоритмов. Например, графические пользовательские интерфейсы часто просты для «программирования», но реальная проблема заключается в том, чтобы иметь хороший дизайн (с точки зрения удобства использования, а не только графического вида).
Есть некоторые области, где проблемы имеют тенденцию быть намного более алгоритмическими по природе этой области все же. Например, ИИ является основным предметом, где в основе лежат алгоритмы. Графика может быть интенсивным алгоритмом, но это зависит от того, что именно подразумевается под «Программирование графики».
В общем, если задача, которую вы решаете программно, подходит для математического представления, то вы входите в алгоритмическую область. Конечно, это всего лишь приблизительный показатель, поскольку вы можете создавать математические модели практически для всего. Но для большинства вещей вы обычно не рассматриваете это.
Последний пример: если проблема заключается в создании графического интерфейса пользователя, который позволяет вводить данные для бизнес-объектов, вы не будете особо задумываться о математических формулировках. Однако, если проблема заключается в создании графического интерфейса пользователя, который динамически изменяется и перемещает элементы на основе некоторого значения важности, у вас гораздо больше шансов получить математическую модель и алгоритмическую реализацию.
источник
i++
качестве нашего нового повелителя .. эээ ... алгоритма.Что вы подразумеваете под проблемой программирования?
Согласно Википедии:
Это означает, что программирование в целом больше, чем перевод алгоритмов через код.
Чтобы дать вам пример, проблема программирования, которая у меня есть сейчас, заключается в том, что мне приходится иметь дело с устаревшим исходным кодом спагетти, добавляя модульные тесты, а затем рефакторинг . Это также включает добавление комментариев в нужных местах, нормализацию заглавных букв имен и т. Д. Это не имеет ничего или мало общего с алгоритмами.
Точно так же многие задачи разработчика не связаны с алгоритмами. Пример: интернационализация. Точно так же многие приложения (например, CRUD) не слишком часто используют алгоритмы в своем исходном коде (не говоря о базовом коде фреймворка).
Теперь, если вы предполагаете, что в «задаче программирования» «программирование» является синонимом перевода алгоритмов через код, тогда да, логически любая проблема будет проблемой алгоритма:
A × n = B × n
еслиA = B
.источник
Я думаю, что ответ категорически нет . Алгоритмы - это просто строительные блоки в гораздо большем наборе навыков.
Я получил степень по CS, специализируясь на искусственном интеллекте
Там фундаментальная проблема, по крайней мере, на мой взгляд, состояла в том, чтобы найти хорошее представление для информации. Эти представления должны быть хорошими совпадениями для структур знаний, которые находятся в головах людей, и должны облегчать те виды манипуляций и изменений, которые с ними совершаются.
С точки зрения повседневного программирования это означает, что основная проблема заключается в определении подходящего предметно-ориентированного языка (DSL) для данной ситуации. Существует много способов создания DSL. Обычное программирование, в котором определены классы, переменные и методы, фактически создает DSL, потому что оно позволяет вам говорить вещи (сопоставлять свои ментальные структуры с кодом), которые вы не могли бы сказать без них.
Алгоритмы тоже важны, но они являются лишь частью истории.
источник
Я полагаю, вы могли бы сказать, что все компьютерные программы являются алгоритмами, потому что вы предписываете последовательность инструкций для достижения желаемого результата. Однако некоторые из самых сложных проблем связаны не с передачей программы на компьютер, а с передачей программы людям, которые будут тестировать и модифицировать программное обеспечение.
Другими словами, компьютеры не заботятся о том, что ваш код совершенно непонятен людям. Они будут работать в любом случае. Задача состоит в том, чтобы сделать код достаточно ясным, чтобы любые ошибки выделялись, как больной большой палец.
Интересно, что технические знания, которые я узнал в колледже об алгоритмах, давно затмились тем, что я узнал сам с тех пор. На данный момент, если бы я хотел получить 3-ю степень колледжа, чтобы помочь мне в моей работе, это было бы в английской композиции.
источник
Большинство проблем программирования на самом деле являются проблемами системного администрирования.
Это своего рода легкомысленный ответ, но я обнаружил, что это правда чаще, чем можно было ожидать. Я не знаю, сколько раз я сталкивался со сбоями, потому что DNS был неверно настроен на тестовом компьютере, устаревший процесс все еще работает, загружая процессор / память / порты, программа работает с неправильным идентификатором пользователя и, следовательно, имеет неправильный разрешения, диск был разбит на разделы неправильно, поэтому места не хватило, была установлена неправильная версия файла конфигурации и т. д.
Правильно подобранные алгоритмы обычно составляют лишь небольшую часть проблемы. Остальная часть проблемы - заставить программу работать над решением реальных проблем в реальном мире.
источник
Я думаю, что да, все проблемы программирования решаемы алгоритмически. Ведь алгоритм - это просто набор инструкций, которые сообщают компьютеру, что делать.
Принимая некоторые из приведенных выше примеров
С точки зрения программирования и даже дизайна, который будет знать шаблоны / правила, которые приведут к созданию эффективных графических интерфейсов, которые являются удобными и эффективными для пользователя. Эти правила сводятся к алгоритму, который при соблюдении должен помочь создать удобный графический интерфейс. Фактически фактические шаги размещения элементов управления в графическом интерфейсе также могут быть сведены к алгоритму
Но способ, которым вы подходите к добавлению модульных тестов, может быть описан таким алгоритмом, как
Проблема с большинством ответов «Да» заключается в том, что люди думают об алгоритмах в терминах быстрой сортировки, сортировки по пузырям вместо набора инструкций, которые сводят подробное смутное описание проблемы к набору четко определенной логики / правил.
источник