Вопрос

По определению алгоритмы не зависят от среды, на которой они работают. Например. Я использую таблицы Excel, чтобы поиграть со структурами данных и провести некоторые эксперименты по перемещению / перемешиванию / маркировке перед реализацией алгоритма на языке программирования.

Какие инструменты и методы вы используете для разработки и моделирования функции алгоритма? Как вы используете программы для рисования? Специальный язык спецификации?

Это было полезно?

Решение

Алгоритмы не зависят от языка, правда. Но любая среда, которую вы используете - это язык, точка. Использование Excel означает, что вы используете Excel " язык " (строки, столбцы, ячейки и т. д.), чтобы выразить некоторые из ваших алгоритмов. Может быть, не законченный, законченный продукт, но вы выразили это в Excel.

UML-диаграммы - это язык для выражения алгоритма. Эскиз на бумаге - это язык для выражения. Трудно отделить платоновский идеальный алгоритм от всех конкретных представлений. Неважно, что вы делаете, вы выражаете это на каком-то языке.

Хитрость заключается в том, чтобы отделить алгоритм от определенных особенностей и ограничений языка.

Любой " неформальный " нотация поможет сделать это. Английский (или другой естественный язык), математика, диаграммы и т. Д. - все они являются кандидатами для выражения алгоритма на языке, свободном от особенностей и проблем реализации.

Я начну с обзора на английском языке. Простой текст, даже не MS-Word или что-то, где форматирование отвлекает.

Для действительно сложных вещей небольшая дополнительная математика помогает сформулировать формальные утверждения о состоянии программы.

Также помогают диаграммы UML. Я использую Argo UML - дешево и эффективно.

Подробнее об этой теме вы хотите прочитать о формальной проверке систем.

Другие советы

Обычно я делаю набросок на бумаге, затем пробую быструю реализацию в Common Lisp и тестирую на REPL.

Я не использую инструмент как таковой, но часто я буду чертить алгоритм в высокоуровневом языке сценариев, таком как groovy, перед его реализацией в Java.

Я считаю, что при использовании сценариев более высокого уровня вам не нужно слишком беспокоиться о языке, и вы можете больше сосредоточиться на алгоритме. Затем, когда вы доказали алгоритм, вы можете перенести его на более ограничительный язык.

Обычно я использую доску (у меня одна на работе, а две дома), чтобы набросать грубый алгоритм и опробовать очень маленький пример проблемы. Если мне нужно его кодировать, я пишу прототип на Python.

Обычно я использую программу для рисования только тогда, когда мне нужно написать формальные документы спецификации. Обычно они показывают дизайн более высокого уровня, чем алгоритмы, как, например, использование Visio для диаграмм UML.

Думаю, это зависит от сложности алгоритма.

Довольно часто я нарисую быстрый набросок блок-схемы на бумаге. Есть несколько отличных инструментов для построения диаграмм, но я до сих пор не нашел такой быстрый, как старый добрый эскиз на листе бумаги.

Кроме этого, я часто заканчиваю тем, что собирал по-настоящему «быстрый и грязный» макет алгоритма в формах Windows VB.NET или консольном приложении. С некоторыми более новыми функциями, такими как LINQ-to-SQL, вы можете даже собрать прототипы, которые полагаются на доступ к базе данных в очень короткий промежуток времени.

  

По определению алгоритмы не зависят от среды, на которой они работают.

Какое это определение? Кто сделал это? И знали ли они о неплотной абстракции ?

Хорошие алгоритмы часто должны знать о платформе, которую они используют. Если бы это было не так, программы могли бы автоматически распараллеливаться для GPU, и их можно было бы легко переписать для работы на квантовых компьютерах.

Тем не менее, многие фундаментальные алгоритмы действительно не зависят от платформы. Как ни странно, я на самом деле чувствую себя наиболее комфортно, используя C ++, чтобы возиться с алгоритмами Однако, делая это, я сильно полагаюсь на высокий уровень абстракций, поэтому я не играюсь с указателями или подобными. С другой стороны, STL на самом деле предлагает довольно богатый инструментарий для работы с алгоритмами.

И так же, как и Билл, я довольно часто пользуюсь своей доской. На самом деле у меня в гостиной стоит доска размером 1 * 2 м. Жутко. ; -)

Обычно я делаю что-то в Python, который реализует алгоритм. Я полностью проигнорирую любые нормальные правила кодирования - например, я не буду создавать классы для хранения своих данных, но я просто создам все большие и большие кортежи, чтобы содержать всю мою информацию и представлять «объект». Это просто, чтобы получить рабочую версию алгоритма как можно быстрее. Как только я пойму это, я реализую это более разумным способом на целевом языке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top