如果你看到这则信息,这表示下载可汗学院的外部资源时遇到困难.

If you're behind a web filter, please make sure that the domains *.kastatic.org and *.kasandbox.org are unblocked.

主要内容

算法的构建基础

算法是描述如何解决一个问题的一系列详尽指令集合。当解决一个特定问题有多个算法时(这种事情简直太常见),最好的算法通常就指的是能最快解决这个问题的一种。
作为程序员,我们每时每刻都在使用算法,无论是常见问题的现成算法,比如数组排序,还是自己程序独有的全新算法。通过理解算法,我们能够更好的决定哪些现成算法可以使用,以及更好的学习如何让我们的新算法正确而有效。
算法有三个基本元素:顺序执行、选择执行、循环执行。
顺序执行:算法是一步一步依次执行的过程,这些步骤的顺序对确保算法的正确性至关重要。
如下是一个将词翻译成儿童黑话(Pig Latin)的算法,例如将"pig"翻译成"ig-pay":
1. 在末尾增补字符 "-".
2. 在末尾增补首字符
3. 在末尾增补字符 "ay"
4. 删除首字母
🔍 试一试改变上述步骤的顺序,结果可不一样,对吧?
选择执行:算法可以通过判断一个布尔表达式的值来选择执行不同的指令集合。
如下是儿童黑话算法的加强版本,可以处理以元音开头的词,因此 "eggs" 翻译成 "eggs-yay" 而不是无法发音的 "ggs-eay":
1. 在末尾增补字符 "-"
2. 储存首字母
3. 如果首字母是元音:
    a. 在末尾增补字符 "yay"
4. 否则:
    a. 在末尾增补首字符
    b. 在末尾增补字符 "ay"
    c. 删除首字符
循环执行:算法通常使用循环来重复执行指令集合固定的次数,或者重复一直执行直到满足某个确定的条件 。
我们将循环加入前面的算法,使算法能够翻译完整的短语,因此 "peanut butter and jelly" 可以翻译成 "eanut-pay utter-bay and-yay elly-jay":
1. 将短语储存为单词列表
2. 对于列表中的每一个单词:
    a. 末尾增补连字符
    b. 如果第一个字母是元音:
        i. 末尾增补字符 "yay"
    c. 否则:
        i. 末尾增补首字符
        ii. 末尾增补字符 "ay"
        iii. 删除首字符
通过将顺序、选择、迭代合并起来,我们成功的找到了翻译儿童黑话的算法。
🤔 你能想到这个算法在什么情况下会有错误的结果吗?
🙋🏽🙋🏻‍♀️🙋🏿‍♂️您对此主题有任何问题吗?我们很乐意回答 — 只需要在下面的提问区提问即可!

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.