![Python算法设计与分析从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/845/44509845/b_44509845.jpg)
2.1 用自然语言表示
自然语言是人类交流和思维的主要工具,是人类智慧的结晶。自然语言处理是人工智能中最为困难的问题之一,而对自然语言处理的研究也是充满魅力和挑战的。算法可以用自然语言表示,下面来看几个例子。
【实例2.1】 烧绳计时问题。
一根粗细均匀的绳子,点燃一头,完全燃烧完需要1个小时。现有若干条材质相同的绳子,用烧绳的方法实现1小时15分钟的计时。用自然语言来描述这一烧绳计时问题的实现过程。
实现步骤如下:
(1)将一根绳子两头点燃,同时另取一根绳子点燃一头,如图2.1所示。
(2)当第一根绳子燃烧完,即为30分钟,这时将第二根绳子的另一头也点燃,并开始计时,如图2.2所示。
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P22_2111.jpg?sign=1738897095-gX2LaMtoqjdWZEchmMikl3gor0lSitd5-0-f82bfd9d42aed53efdb94d12c04670b4)
图2.1 一根绳子两头点燃,另一根绳子点燃一头
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P22_2113.jpg?sign=1738897095-2AUtK8eSeN078UG8UC6JGV8nEtOlP4jx-0-c132db18f6e09545da2b6bfec270bbef)
图2.2 第二根绳子的另一头也点燃
(3)从计时开始,到第二根绳子完全燃烧完,用时15分钟,如图2.3所示。
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P22_2118.jpg?sign=1738897095-FqlnRs77Ckmlh9EChx7U6oyhyKLnHWg3-0-009824b0e9f211ff3b63a55372be15df)
图2.3 第二根绳子后半段燃烧完用时15分钟
(4)再取一根绳子,从一头点燃,直至燃烧完毕,用时1小时,如图2.4所示。此时计时结束。
从计时开始,到计时结束,加起来用的时间正好是1小时15分钟(见图2.3和图2.4)。上面的步骤(1)(2)(3)(4)就是用自然语言描述的烧绳计时问题。
【实例2.2】 舀酒问题。
一家商店卖酒,店里只有两个舀酒的勺子,分别能舀7两酒和11两酒。有一天,一位顾客为了难为老板,硬要买2两酒。聪明的老板毫不含糊,用两个勺子在酒缸里舀酒,并倒来倒去,居然真的量出了2两酒。聪明的你能做到吗?试着用自然语言描述此问题的解决过程。
实现步骤如下:
(1)先舀7两酒倒入11两的勺里,此时11两勺里有7两酒,如图2.5所示。
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P23_2127.jpg?sign=1738897095-y9VAgtpdYmCT0SZFwInH7oCoyagATUHh-0-095ab2a4e1e8c6701da0e9b2e2106434)
图2.4 第三根绳子燃烧完用时1小时
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P23_2129.jpg?sign=1738897095-N1Aiva6naUlTv0DnMaZ3Opj1pZOmumC9-0-4e53060e03fb6d9c92ccf28b5d803893)
图2.5 舀7两酒倒入11两勺里
(2)再舀7两酒往11两的勺里倒,由于11两勺里只能再倒入4两酒,因此7两勺里将剩下3两酒,如图2.6所示。
(3)把11两勺里的酒倒掉,再把7两勺里的3两酒倒入11两勺里,此时11两勺子里有3两酒,如图2.7所示。
(4)再舀7两酒倒入11两勺里,此时11两勺里还可以装11−(3+7)=1两酒,如图2.8所示。
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P23_2135.jpg?sign=1738897095-jYW12ZoVqfBimchIxxv6oDkmqzqu7dn1-0-ae7901b62fd96feabb4907ab53bcb7d9)
图2.6 再舀7两酒补满11两勺
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P23_2138.jpg?sign=1738897095-AP2WKfUBjjbLtkLr0PTm6zSHLbAvWccp-0-0f64f0257d3f25e5b94030a8a3445767)
图2.7 将剩余3两倒入11两勺里
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P23_2142.jpg?sign=1738897095-5EgvARnqJqX1VHzyf1wstKU6yn6qG4MK-0-30ea00a9318dd57d9a842939879fc6c0)
图2.8 舀7两酒倒入11两勺里
(5)再舀7两酒往11两勺里倒,由于只能倒1两酒,所以7两勺中还剩下7−1=6两酒,如图2.9所示。
(6)把11两勺里的酒倒掉,把7两勺里的6两酒倒入,此时11两勺里还可以再装11−6=5两酒,如图2.10所示。
(7)再舀7两酒,往11两勺里倒,补满之后,7两勺里剩下7−5=2两酒,如图2.11所示。
从最后的描述上看,最终用7两勺和11两勺舀出2两的酒。
这两个实例使用自然语言来描述一个算法。对于自然语言描述算法有优点也有缺点。优点是易于理解,更符合人类的语言描述;缺点是不能让计算机执行,书写较麻烦,对复杂的问题难以表达准确。
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P24_2154.jpg?sign=1738897095-7y0vWzsEBeyqBddFt6EglWTwZuezY6iK-0-8ca29607da6c8525127e5ef243a4f18b)
图2.9 7两勺里还剩下6两酒
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P24_2157.jpg?sign=1738897095-2aIGQbJL8pRHG1HZzNMPnnCb9AneCprO-0-16ebcb71e24b86f6bff17150c3593207)
图2.10 将6两酒倒入11两勺里
![](https://epubservercos.yuewen.com/569667/23721647609535706/epubprivate/OEBPS/Images/Figure-P24_2160.jpg?sign=1738897095-zA54Nr9ajGBurnWzVsEcOPmylMdftoIm-0-4a1f4377cf1d4bba80200f5ab381272f)
图2.11 7两勺还剩2两酒