教育

开发基础:我自己编程,第13篇

treasureMap_13

解决问题的策略

<<阅读该系列的前一篇文章阅读>>系列的下一篇文章

所以我们现在真的开始着手一个与编程相关的全新学科。逻辑和解决问题的能力。我们现在已经有足够的方法和方法来处理我们背后的代码,我们可以弄清楚如何使用代码,代码中不同的东西做了什么,或者如果我们还没有记住它们,我们至少知道如何查找答案并适应和改进结果。但现在是时候真正靠自己了,从零开始解决问题,自己解决问题。

来自Stepik的自适应Python PyCharm Edu课程承诺了这一点。这是一个在一个更宽容的环境中练习我们编码和解决问题的能力的系统,因为我们可以从课程中得到提示。但是为了准备下一阶段,让我们来看看一些可能有用的解决问题的策略和技术。

解决问题的能力只能通过解决问题来提高。如果你在努力解决问题,你并不孤单。每当你遇到一些智力任务,可能会让你感到痛苦;这是你身体对激活大脑的反应。它让人痛苦,让人沮丧,让你的血压上升,为什么不去烦恼呢,为什么不让我们的大脑沐浴在BuzzFeed的文章中呢?是时候锻炼你的大脑了!我们先来做个简单的热身。

不用计算器算出27 × 13的答案。

所以没有固定的方法来解决这个问题:对我来说,我会把它分成几个部分;首先算出25 × 10,然后加上75,最后加上26。基本上,25 x 13 + 26,因为我发现25是一个更容易处理的数字。另一种方法是乘以27 × 10得到270,然后乘以27 × 3,把两份加在一起。你也可以用你在学校学过的长乘法来做。3 x 7进20,3 x 20 +(之前的20),然后第二行,把数字加一个0,因为我们现在处理的是10,1 x 7,然后1 x 200,给你两行81和270,然后你只需要把它们加在一起,嘣,答案是一样的。

长乘法的例子

通过解决这个问题,注意你的感觉,可能会有一定程度的身体不适。这是因为你正在激活你的系统2思考,快与慢,丹尼尔·卡尼曼著。你有两个思维系统:系统一和系统二。系统1是快速系统;它几乎是自动的,不需要太多的努力,例如当你求解2 + 2时-与上面的计算不同的一种努力。第一系统会先发挥作用,因为它最省力,所以你的大脑更喜欢它。然后是系统2,它会思考问题。

让我们尝试另一种热身:

球棒和球的价格为1.10美元。

球棒比球贵1美元。

这个球要多少钱?

提示it is not 10c。如果球的价格是10美分,那么球棒的价格是1.10美元,因此总成本是1.20美元。

这有什么意义呢?第一点是,我觉得这很酷。第二点是,你在激活第二系统并有逻辑地想出解决方案时,会有一种感觉,这种感觉并不总是舒服的,这是你应该试着习惯的,因为在实际解决问题时,你会经常遇到这种情况,因为你将不得不经常使用你的第二系统。

所以,在这一点上,让我们来看看一些解决问题的策略,不管你喜不喜欢,总有一天会派上用场的。


盒形原则

狄利克雷盒原理指出,如果n+1颗珍珠被放入n个盒子里,那么至少有一个盒子里有一颗以上的珍珠。很明显吧?另一个现实生活中的例子是,如果一个房间里有三个人,至少有两个是同性的(理论上是这样的)。

你可以用方框原理如果问题有一个有限集,它有时也适用于无限集但如果你知道一个集合中有多少个那么这个原理就可以用了。

问题:

在一场有n人参加的比赛中,每个人只和其他人比赛一次。证明在游戏中总是有两个玩家玩了相同的游戏次数。

扰流板解决方案:

玩家(pearl)进入game (box) #i,如果他们有i个游戏。我们有n个玩家,n场游戏编号为0,1,2,3,…,n-1。但是数字为0和n-1的游戏不能同时被占用。所以至少有一个游戏有一个以上的玩家。


不变性原则

这种解决问题的策略是建立在寻找重复执行算法时不变的原则之上的。所以基本上,它可以用来快速判断一个结果是否可以实现。

这是一个可以应用不变性原则的示例问题……

问题:

龙有100个头。骑士一刀就能砍下15、17、20或5个人头。紧接着,它的肩膀上又分别长出了24、2、14或17个新脑袋。如果所有的头都被砍掉,龙就死了。龙会死吗?

扰流板解决方案(在你用你的系统去尝试这个问题之前,克制住自己去阅读它的冲动!):

看看每一击中正面数的净变化。如果我们切掉15个头,长出24个,净变化是+9。类似地,-17和+2导致净变化为-15。同样,-20 +14 = -6,-5 +17 = +12。诀窍在于注意+9、-15、-6和+12这四个数字是如何被3整除的。另一种说法是正面的次数是不变模3.最后我们需要注意的是,100是能被3整除。这意味着无论我们打了多少次或哪一拳,龙都不会死,而且会在村庄里肆虐多年,所以知道了这一点,你就知道最好使用强毒药或异鬼魔法。


极值原则

这一原理也被称为变分法,适用于证明具有某些性质的物体的存在。这个原理告诉我们选择一个能使某些功能最大化或最小化的对象。然后对结果对象进行所需属性的测试。

问题:

想象一个棋盘,每个方格都包含一个正整数。如果每个方格的值等于它在北、南、西、东四个相邻方格的平均值,则证明所有方格的值都相等。

解决方案:

考虑包含最小值的平方。那么它的四个邻居都必须是这个最小值。类似地,它们的邻居也必须有这个最小值,以此类推,直到无穷大甚至更大。因此,棋盘上的每个方格都有相同的值。

还有一个问题:

比赛的每个参与者与其他参与者只进行一次比赛。没有一场比赛是平局。比赛结束后,每个球员都列一个名单,上面有所有球员的名字

  1. 在哪里被他们打败(玩家)
  2. 被他们打败的球员打败了

证明某些玩家的列表包含所有其他玩家的名字。

解决方案:

设“A”为赢得游戏次数最多的参与者。如果“A”不具有这个问题的性质(赢了所有的游戏),那么就会有另一个玩家B,他赢了A,也赢了所有被“A”击败的玩家。所以B赢的次数比A多。这与选择“A”相矛盾。所以你在这里所做的是测试最高可能的结果(极值),即最高赢家赢得所有游戏,如果他们不能满足这一点,那么其他人也会这样做的机会也会下降。


列举的组合

枚举组合学是一个解决特定模式可以形成的方式的领域。对于这类问题,更好的说法是“可能的组合”,或者更简单的说法是“寻找模式”。

如果你看过电影《心灵捕手》,好吧,“这不是你的错”,因为这是一部相当不错的电影,讲述了建筑工人在擦地板时偷偷地喜欢解决最复杂的数学问题;我是否正确理解了电影背后的意义。你在走廊的黑板上看到的不是垃圾蜘蛛图,而是Cayley的数字T公式n有n个顶点的标记树。

问题- Cayley关于T的公式nn个顶点的标记树:

树是没有循环的无向图。如果顶点有编号,它就被称为有标签的。如果你觉得这很难理解,试着去理解维基百科上关于它的文章:https://en.wikipedia.org/wiki/Cayley%27s_formula.如果我没理解错的话,它的意思是一棵树有多少种不同的组合方式。为了求出它,我们需要给出T的公式n

只有一种方法来标记具有一个顶点的树,对于具有两个顶点的树也是如此,因为树是没有方向的。但是对于3个点有3种可能的标记方式,对于4个点有16种标记方式12种标记链的方式然后是4种标记星号的方式。

那么如果我们有5个潜在的点有60种不同的标记链的方法,一个星号可以有5种,然后有一种方法让这些点相交就有60种不同的组合。这意味着有60 + 60 + 5 = 125种方法。

n 1 2 3. 4 5
Tn 1 1 3. 16 125

如果我们假设这个是无限的,我们可以试着解出这个公式。

所以在每种情况下,它都是自身的1倍。3 4 x 4 5 x 5 x 5。所以猜测是6 x 6 x 6 x 6。拿出你的笔记本,试着看看这是否适用于6……它适用。

解决方案:

但不幸的是,我们需要把它变成一个实际的方程用我在学校学到的古老数学,这意味着6的4次方。64但是现在我们要做一个通用方程,所以它变成了Tn= nn-2.你可以看到对于每一个数这个方程都成立我们可以坐下来享受解决问题的荣耀,为什么问题解决了?因为你现在有一个算法来解决这个问题不管输入是什么。


要真正解决问题,我们可能应该知道所有有助于解决问题的其他点,以及它们与问题的关系,以及如何接近它们来解决问题。但是,生命是短暂的,如果我遇到麻烦,我会谷歌它,希望比我聪明得多的人有答案。

此外,如果你想深入了解真正的细节,并全面解决问题,你必须知道如何使用和处理以下几种有趣的逻辑类型:

函数方程
序列
多项式
不平等
几何

但这些都是未来的问题。


与众不同的想法

现在,让我留给你们最后一个问题:

不要让你的铅笔离开纸,画四条直线,穿过下面的九个点?

跳出框框思考

不可能的对吗?看着这个问题,你可能会推断出有一些限制强加在你身上,比如你需要把所有的线都限制在已经画好的盒子里,但就像生活中所有的问题一样,你如何解决问题的限制都是自己强加的,如果它有效,那就没有错。对吧?

解决方案:
跳出固有的思维模式。

跳出框框思考解决方案

问题不是问题。

问题在于你对待问题的态度。——杰克船长

发现更多的

Baidu