【问题标题】:Mediums to try out algorithms? [closed]尝试算法的媒介? [关闭]
【发布时间】:2008-11-28 12:17:16
【问题描述】:

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

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

【问题讨论】:

    标签: algorithm excel simulation specifications


    【解决方案1】:

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

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

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

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

    我首先用英语进行概述。纯文本,甚至 MS-Word 或格式会干扰的东西。

    对于非常复杂的事情,一些补充数学有助于围绕程序的状态进行正式断言。

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

    有关此主题的更多信息,您想了解formal verification 系统。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 我也倾向于主要在白板/纸上工作,然后在 Python 中进行原型制作。
          【解决方案5】:

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

          实际上,我经常会在一些纸上画出一张流程图的草图。有一些优秀的图表工具可用,但我还没有找到一个像在一张纸上画出老式草图一样快的工具。

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

          【讨论】:

            【解决方案6】:

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

            这是什么定义?是谁做的?他们知道leaky abstraction吗?

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

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 2011-02-14
                • 2020-12-30
                • 1970-01-01
                • 2017-01-04
                • 1970-01-01
                • 1970-01-01
                • 2011-06-19
                • 1970-01-01
                • 2010-11-05
                相关资源
                最近更新 更多