思考札记(一):算法中人脑和机器脑的比例

思考缘起

这两天随便在CSDN上搜索题目做,搜到了经典的8皇后问题和智慧的贼问题,意识到算法的强大。家里人看到我在一堆数字中画圈圈,想用人脑来解决8皇后问题,还以为我在买彩票……

8皇后问题的解答,网上看到最经典的是DFS算法,当我试着不用该算法解决问题的时候,就意识到自己的脑子不够用了。智慧的贼题目也是一样。

当我想用人脑去写规则的时候,规则越多,就越容易得不到最全的答案。

而规则少的时候,计算机算量非常大,耗时长也能解决问题,可是就容易出现内存溢出的问题,根本等不到答案的冒泡。

如何让自己编写的算法最优化呢?

有题目文字描述的时候,规则 = 题干所有的限制条件。

没有任何一个题干内容是白写的,这和我们读书时候解数学题是一回事儿。当我们把题干的内容,作为限制条件写成算法的规则,去圈定计算机尝试的范围。这是最好的选择。

如果没有题干呢?

比如一个现实的问题,我们想用编程的方法,获得最优解,该如何用人脑去指定规则呢?

  • 缩——寻找特例:将一个广谱的问题,缩小到一定范围,比如一个问题“8皇后在8x8的棋盘中,如何摆放才能让皇后们互不相见”,那我们就缩小到5x5,4x4,3x3的棋盘,自己摆摆看,找寻规律。

  • 缩 = 让人脑做更多。问题是人脑提出限制条件越多,就越不可能覆盖真理的全部。

  • 分析——如果要皇后互不相见,“满足每一行、每一列、每一斜列都独有一个皇后”就是我们分析后得到的约束条件,也就是需要人脑编程来指定的规则。

  • 放——广谱化问题:还是那个8x8的皇后问题,如果广谱化摆放,即先在棋盘任意的位置摆放一个皇后,删除永久不能摆放的棋格,下一个皇后就在可选棋格内摆放,再删掉所有永久不能摆放的棋格。这样是否可行呢?

  • 广谱化 = 让计算机做更多。当我们广谱化问题后,就会遇到计算机迭代试错的次数增加。但如果我们指定规则,选择从第一行开始摆起,一行行的遍历,默认每一行都只能放一个皇后,判断下一行是否能摆放,放不完8个皇后就回到能放的分支再往下进行选择。——>这就是DFS回溯算法了。

算法的重要性

作为一个小白,到这里明白算法的重要性了。这些总总算法,都是前人走通的路子,这些路子,就是尽量减少了人脑局限,但又能给计算机以一定的规则的方法。如果要从小白自己总结,不知道又要花多少时间。

在网上买了一些算法的书籍,后面博客更新可能会慢很多,因为要扎进算法学习的海洋。

因为我在网上找到的题目,大多数是来自于力扣(https://leetcode-cn.com/),专门去看了,有答题框架,像玩游戏通关一样。听说目前中文版和英文版已经打通,里面有很多算法题可以刷。在本博客系统中曾有大神一年内就通过刷题从小白成为了Microsoft的员工。既然是要付年费,那就等我算法书看完,再去刷题啦。

和各位小白共勉,也向各位大神致敬

老熊去也。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊@RoyalzoneTCM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值