前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python解决能力很OK?做几题测试一下(3)

python解决能力很OK?做几题测试一下(3)

作者头像
叶子陪你玩
发布2021-12-21 14:27:04
2360
发布2021-12-21 14:27:04
举报
文章被收录于专栏:叶子陪你玩编程

前面写了两篇python基础语法的内容,

python基础语法很OK?做几题测试一下

python基础语法很OK?做几题测试一下(2)

相比其它文章阅读量,总体上还是很不错的,可能是里面的任务目标比较明确吧,直接上的题目,并且用到的知识都是非常少的(不涉及到具体领域,比如图像处理),纯粹是逻辑问题,以有限的知识,解决大多数问题应该是大家都比较喜欢的。

在学习编程或者实际生活的过程中,相信大家应该都碰到过各种各样的问题,但是新问题总是层出不穷,感觉学习没有尽头;

这时我们就会思考,有没有那种比较通用的方法,学一个就能够解决一大类问题,多学习几种,那么就可以覆盖很多的问题了。

确实是有的,那就是算法——解决问题的方法,以前我听过一个大佬说过,编程掌握变量,循环,判断,配合上一个递归,能够解决百分八九十的问题。

而实际的问题进行总结归纳,大多数都是属于排序搜索(查找)匹配问题,当然还有一些其它领域以及最新的机器学习方法,这里就不在讨论。

可以思考一下生活中的一些现象,手机通信录查找某个联系人,查找文件,搜索引擎查找答案,游戏排名,推荐,班级最高分,最低分等等。这些问题是不是都是排序搜索的问题。

看到一个问题,厉害的人总是一眼看出这个问题需要使用什么解决方法,这不就是一个排序问题吗?这不就是一个匹配问题吗?模式识别果然厉害。

比如我是自学的(野路子)编程,以前根本感觉不到算法有什么用,确实很多问题规模比较小,也没有性能要求,暴力算法感觉能够解决一切;直到我用一些常规的方法感觉太慢了,不满足我的要求,我才真实感觉到算法巧妙的魅力。

之前看过《这就是搜索引擎》这本书,里面讲到搜索引擎3个目标以及3个核心问题,以及不同发展时期搜索引擎的变化,觉得非常好:

3个目标

搜索引擎可以说是目前所有互联网应用里技术含量最高的一种,尽管其应用形式非常简单:用户输入查询词,搜索引擎返回搜索结果。但是要为以亿计数的互联网用户提供准确快速的搜索结果,里面包含了很多技术手段。总的来说,搜索引擎技术所希望达到的目标可以归纳为:更全、更快、更准

3个核心问题

1 用户真正的需求是什么? 2 哪些信息是和用户需求真正相关的? 3 哪些信息是用户可以信赖的?

3个时期

对于第一代文本检索式搜索引擎,其重点关注的是查询关键词和网页内容的相关性。这种搜索方式假定用户输入的查询关键词就是用户的真实需求,很明显这种假设很难成立。另外,这种搜索方式对于信息的可信度也未做任何识别。 第二代搜索引擎引入链接分析技术,链接关系代表了一种推荐含义,而获得越多推荐的网页其链接分析得分越高,这其实是一种对网页可信度的度量标准。 第三代搜索引擎的重点则是用户的真实需求,其他方面则兼顾了第二代搜索引擎的优点,即第三代搜索引擎同时考虑了3个核心问题。

1.找出下列列表中元组数值和最小的一个,同理最大值也是一样大。

代码语言:javascript
复制
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11), (12, 13, 14), (15, 16, 17), (18, 19, 20), (21, 22, 23), (24, 25, 26)]

结果:

代码语言:javascript
复制
最小值:(0, 1, 2)
最大值:(24, 25, 26)

2.找出下列列表中出现次数最多的元素,并打印出次数。

代码语言:javascript
复制
l = [1,3,4,5,6,1,3,4,5,1,9,1,1,1]

结果:

代码语言:javascript
复制
1出现最多,次数6次。

3.找零钱问题

给定可找的零钱种类,以及待找的零钱总数,求出最少的零钱数量方案。

比如找6元零钱,

方案1: 4 1 1;

方案2: 3,3;

方案3:3,1,1,1;

方案4:1,1,1,1,1,1;

明显方案2找的数量最少,只有2。

代码语言:javascript
复制
values = [1, 3, 4]  # 硬币面值
total = 6  # 需要找零钱总值

结果:

代码语言:javascript
复制
[3,3]

4.数独4

利用程序自动完成4*4数独

代码语言:javascript
复制
[[0, 1, 0, 0], 
 [0, 0, 0, 2], 
 [3, 0, 0, 0],
 [0, 0, 4, 0]]

结果:

5.数独9

加大难度,利用程序自动完成9*9数独。

代码语言:javascript
复制
[[2, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 3, 6, 0, 0, 0, 0, 0],
 [0, 7, 0, 0, 9, 0, 2, 0, 0],
 [0, 5, 0, 0, 0, 7, 0, 0, 0],
 [0, 0, 0, 0, 4, 5, 7, 0, 0],
 [0, 0, 0, 1, 0, 0, 0, 3, 0],
 [0, 0, 1, 0, 0, 0, 0, 6, 8],
 [0, 0, 8, 5, 0, 0, 0, 1, 0],
 [0, 9, 0, 0, 0, 0, 4, 0, 0]]

结果:很多种答案,下面只是列出了一些。

6.迷宫问题

给定一个大小为5*6的迷宫,由通道(0)和墙壁(1)组成,其中通道左上角表示起点,通道右下角表示终点,找到迷宫路径。

代码语言:javascript
复制
maze = [[0, 1, 0, 0, 0],
        [0, 0, 0, 1, 0],
        [0, 1, 0, 1, 0],
        [1, 1, 1, 0, 0],
        [0, 1, 0, 0, 1],
        [0, 1, 0, 0, 0]]

结果:

代码语言:javascript
复制
[[0, 0], [1, 0], [1, 1], [1, 2], [0, 2], [0, 3], [0, 4],
 [1, 4], [2, 4], [3, 4], [3, 3], [4, 3], [5, 3], [5, 4]]

7.迷宫问题2-最短路径。

给定一个大小为5*5的迷宫,由通道(0)和墙壁(1)组成,其中通道左上角表示起点,通道右下角表示终点,找到迷宫最短路径。

代码语言:javascript
复制
maze = [[0, 1, 0, 0, 0,],
        [0, 1, 0, 1, 0,],
        [0, 0, 0, 0, 0,],
        [0, 1, 1, 1, 0,],
        [0, 0, 0, 1, 0,]]

这里有两种方案,不过方案2才是最短路径。

如何识别实际问题用到那种算法,这个是需要练习的,解决上面问题,也不用太纠结算法这个概念,各种名称,你就按照正常的思路去解这个问题,你能解出来,那么你的方法就是一个算法-解决问题的方法,性能暂时可以不要考虑。

感兴趣后可以去找其它类型的算法试试。

有些之前放过可视化的视频,感兴趣的可以看之前的记录

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档