2

根据定义,算法独立于它们运行的​​介质。例如,在用编程语言实现算法之前,我使用 Excel 表来玩数据结构并做一些移动/洗牌/标记实验。

您使用什么工具和技术来设计和模拟算法的功能?你如何使用绘图程序?一种特殊的规范语言?

4

7 回答 7

3

我通常在纸上画出草图,然后尝试在 Common Lisp 中快速实现并在 REPL 上进行测试。

于 2008-11-28T12:28:51.167 回答
3

算法是独立于语言的,真的。但是你使用的任何媒介都是一种语言,句号。使用 Excel 意味着您正在使用 excel“语言”(行、列、单元格等)来表达您的一些算法。也许不是完整的成品,但您已经在 Excel 中表达了它。

UML 图是一种表达算法的语言。纸上的草图是一种表达语言。很难将柏拉图式的理想算法与所有具体表示区分开来。无论你做什么,你都是在用某种语言表达它。

诀窍是将算法与特定的语言特征和限制分开。

任何“非正式”符号都将有助于做到这一点。英语(或其他自然语言)、数学、图表等都是用没有实现怪癖和问题的语言表达算法的候选者。

我从英语的概述开始。纯文本,甚至不是 MS-Word 或格式会分散注意力的东西。

对于真正复杂的事情,一些补充数学有助于围绕程序的状态提出正式的断言。

此外,UML 图也有帮助。我使用Argo UML——既便宜又有效。

有关此主题的更多信息,您想了解形式验证系统。

于 2008-11-28T13:06:02.450 回答
2

我不使用这样的工具,但在用 Java 实现它之前,我通常会在高级脚本语言(如 groovy)中粗略地编写算法。

我发现使用更高级别的脚本语言,您不必太担心语言,您可以更专注于算法。然后,当您证明了该算法时,您可以将其移植为限制性更强的语言。

于 2008-11-28T12:23:34.140 回答
2

我通常使用白板(我有一个在工作,两个在家里)来勾勒粗略的算法,并尝试一个非常小的问题实例。如果我需要编写代码,我会用 Python 编写一个原型。

我通常只在需要编写正式的规范文档时才使用绘图程序。这些通常显示比算法更高级别的设计,例如将 Visio 用于 UML 图。

于 2008-11-28T12:55:09.600 回答
0

我想这取决于算法的复杂性。

很多时候,我实际上会在一些纸上画一个流程图的草图。有一些优秀的图表工具可用,但我仍然没有找到一个像在一张纸上画出一个好的老式草图一样快的工具。

除此之外,我经常在 VB.NET Windows 窗体或控制台应用程序中拼凑出一个真正“快速而肮脏”的算法模型。借助 LINQ-to-SQL 等一些较新的功能,您甚至可以在很短的时间内将依赖于数据库访问的原型放在一起。

于 2008-11-28T12:22:41.180 回答
0

根据定义,算法独立于它们运行的​​介质。

那是什么定义?是谁做的?他们知道泄漏抽象吗?

好的算法必须经常了解他们正在使用的平台。如果不是这样,程序将自动为 GPU 并行化,并且可以毫不费力地重写以在量子计算机上工作。

也就是说,许多基本算法确实与平台无关。奇怪的是,我实际上觉得使用 C++ 来摆弄算法是最舒服的。但是,在执行此操作时,我严重依赖高级抽象,因此我不会使用指针或类似的东西。另一方面,STL 实际上提供了一个非常丰富的工具包来玩弄算法。

而且,和比尔一样,我也经常使用我的白板。我的客厅里实际上有一块 1m * 2m 的白板。爬行。;-)

于 2008-11-28T18:25:08.967 回答
0

我通常用 Python 破解一些实现算法的东西。我将完全忽略任何合理的编码准则——例如,我不会创建类来存储我的数据,但我只会创建越来越大的元组来包含我的所有信息并表示一个“对象”。这只是为了尽快获得算法的工作版本。一旦我理解了它,我将用目标语言以更理智的方式实现它。

于 2008-11-28T18:54:59.530 回答