请选择 进入手机版 | 继续访问电脑版
查看: 1133|回复: 0

【算法分享】表达算法

[复制链接]

  离线 

已抛锚 成长值: 850

  • TA的每日心情
    慵懒
    2020-6-24 10:54
  • 签到天数: 78 天

    [LV.6]常住居民II

    350

    主题

    406

    帖子

    2533

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    2533
    发表于 2020-3-22 11:05:33 | 显示全部楼层 |阅读模式
    我们可以通过多种方式表达算法,包括自然语言,流程图,伪代码,当然还有实际的编程语言。

    自然语言是一种流行的选择,因为它对我们来说很自然,并且可以将算法的步骤传达给广大受众。在开发算法时,我们经常与了解编程的人和不懂编程的人一起工作,但是他们都懂自然语言。

    但是,自然语言有其缺点。由于它没有强制性的结构,因此它倾向于模棱两可且定义过于模糊。这使得其他人很难遵循该算法并对算法的正确性充满信心。流程图和伪代码是可以更精确地表达算法的结构化格式,在计算机科学家和程序员中很流行。

    让我们通过表达前一篇文章中的Pig Latin算法来尝试更结构化的格式。



    流程图
    表达算法的更正式方法是使用流程图,即带有箭头连接的方框的图。

    首先,下面是Pig Latin算法基本版本的流程图:

    基本Pig Latin算法的流程图,其中6个节点从一个流向另一个:

    • “开始”
    • “追加“-””
    • “追加首字母”
    • “追加“ ay””
    • “删除首字母”
    • “结束”






    每个矩形代表序列中的一个步骤,箭头从一个步骤流向下一步骤。



    下一个流程图是针对改进的算法的,并使用菱形表示选择阶段:

    改进的Pig Latin算法的流程图。它从3个节点开始,从一个节点流向下一个节点:

    • “开始”
    • “追加“-””
    • “存储首字母”

    然后,菱形节点的条件为“第一个字母=元音?”。

    标记为“ true”的箭头导致:

    • “追加”
    • “结束”

    标记为“ false”的箭头导致:

    • “追加首字母”
    • “追加“ ay””
    • “删除首字母”
    • “结束”








    最后,此流程图通过迭代可视化了完整的算法:



    最终Pig拉丁算法的流程图。它从3个节点开始,从一个节点流向下一个节点:

    • “开始”
    • “存储单词”
    • 「以言语表达」

    标记为“单词”的箭头从那里流向以以下内容开头的嵌套流程图:

    • “开始”
    • “追加“-””
    • “存储首字母”

    然后,菱形节点的条件为“第一个字母=元音?”。

    标记为“ true”的箭头导致:

    • “追加”
    • “结束”

    标记为“ false”的箭头导致:

    • “追加首字母”
    • “追加“ ay””
    • “删除首字母”
    • “结束”

    箭头从嵌套流程图的“末尾”流向“以单词为单位”。

    标记为“单词结尾”的箭头从“单词中的单词”流向“终点”节点。






    在流程图中表达算法可以使我们在较高的层次上可视化该算法,此外,它还迫使我们非常仔细地考虑排序和选择。哪个箭头指向哪个节点?是否有缺少的箭头?这些是将算法转换为流程图时可能会遇到的有价值的问题。



    伪码
    最终,大多数算法成为实际在计算机上运行的代码。在此之前,程序员经常喜欢用代码来表达算法:代码使用一种编程语言的所有构造,但实际上并没有在任何地方运行。

    这是以AP CSP伪代码样式编写的Pig Latin算法:
    FOR EACH word IN words
    {
      APPEND(word, "-")
      letter ← FIRST_LETTER(word)
      IF (IS_VOWEL(letter)) {
        APPEND(word, "yay")
      } ELSE {
        APPEND(word, letter)
        APPEND(word, "ay")
        REMOVE_FIRST(word)
      }
    }



    由于没有正式的标准,每个程序员编写伪代码的方式都不同,因此您可能会遇到看起来很不一样的伪代码。

    用伪代码表达算法可以帮助程序员以熟悉的方式思考,而不必担心语法和细节。它还为计算机科学家提供了一种与语言无关的方式来表达算法,从而使来自任何语言的程序员都可以使用,读取伪代码并将其转换为他们选择的语言。



    编程语言
    一旦我们计划了算法,无论是自然语言,流程图,伪代码,还是组合代码,都可以将其转换为运行代码。

    我们将Pig Latin算法转换为JavaScript,因为这是我们在Khan Academy上选择的语言。我们可以使用for循环进行重复,使用if/ else进行选择,然后将字符串和数组操作混合使用。









    软件是用各种编程语言编写的,具体取决于软件的功能和制造者。可汗学院目前在代码库的不同部分使用四种不同的语言。幸运的是,我们到处都可以使用相同的算法!



    温馨提示:
    1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
    2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
    3、根据二○○二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!谢谢
    4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
    5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
    6、本站所有资源来自互联网,版权归原作者所有,所有资源仅供于学习、交流研究,请于下载24小时之后删除!
    7、当您在浏览本站时,发现有您自己创作的原创资源时侵犯了您的合法资源时,请您及时联系管理员,邮箱:2550721739@qq.com,我们会及时处理!
    使用 高级模式(可批量传图、插入视频等)
    您需要登录后才可以回帖 登录 | 立即注册