史上最简单的python算法入门书,像看小说一样学习算法你敢信?

三板斧实现快速排序!& 利用列表循环[i for i in array[0:] if i>pivot]进行数组的快速筛选 文章目录1.利用列表循环进行快速筛选!2.利用列表循环实现快速排序! 1.利用列表循环进行快速筛选! 首先来康康一个python中十分好用的列表循环方法 [i for i in array[1:] if i < pivot] 此为一个高效的循环判断并形成一个新的列表 通过这个语句我们可以得到一个列表(数组) 这个列表中的元素都满足 这一条件 2.利用列表循环实现快速排序! 来看看我们的三板斧! 一板斧——设置基准条件 二板斧——将要排序的数组分成三部分:两个子数组和基准值 三板斧——将子数组分别 阅读详情

算法是计算机科学领域最重要的基石之一,同时也是出了名地难学。最出名的一本书莫过于算法导论了

但是,这本非常非常出名的大头书,真的是谁看谁知道。看了之后都有点怀疑人生,一大批人也因此从入门到放弃。

但是还是有很多人跑去学算法,为什么呢?

原因还是算法工程师的待遇实在是太好了,做技术岗位的都能达到月薪三万,如果再会点业务做管理呢?想都不敢想哦。

其实算法真的难吗?其实不然。如果你觉得难得话,那肯定是因为你没有看过这本书

号称能像看小说一样看懂算法。我一开始也是不信的,毕竟我可是看过算法导论的人。因为是图灵出版社(国内最好的IT类书籍出版社)出版的书籍,所以我还是买来看了一下,结果就真的就像是看小说一样,花了一天时间全部看完了。我们也可以看一下别人的评论。

我自己是看过这本书的,所以我对上面的评论也深信不疑。由于好评太多了,我就不一一展示了,想要详细了解的可以去看一下豆瓣评论。接下来我们看一下部分内容。

内容部分

一、算法简介

1.1二分查找 :

一个有序数组中找一个数的位置(对应该数字所在数组下标index)。

def binary_search(list, item):

low = 0

high = len(list) - 1

while low <= high:

mid = int((low + high) / 2)

guess = list[mid]

if guess == item:

return mid

if guess > item:

high = mid - 1

else:

low = mid + 1

return None

my_list = [1, 3, 5, 7, 9]

print(binary_search(my_list, 3)) # => 1

print(binary_search(my_list, -1)) # => None

也可用递归实现

操作对象:数组

使用前提:有序的数组

性能方面:时间复杂度O(logn)

1.2 旅行商问题:

旅行商前往n个城市,确保旅程最短。求可能的排序:n!种可能。

二、选择排序

2.1 数组和链表

数组:连续存储在硬盘中;链表:分散存储在硬盘中;

2.2 选择排序:将数组元素按照从小到大的顺序排序,每次从数组中取出最小值

def findSmallest(arr):

smallest = arr[0]

smallest_index = 0

for i in range(1, len(arr)):

if arr[i] < smallest:

smallest = arr[i]

smallest_index = i

return smallest_index

def selectionSort(arr):

newArr = []

for i in range(len(arr)):

smallest = findSmallest(arr)

newArr.append(arr.pop(smallest))

return newArr

print(selectionSort([5, 3, 6, 2, 10])) #[2, 3, 5, 6, 10]

三、递归----一种优雅的问题解决方法

适用递归的算法要满足:

基限条件(即返回的条件)

递归条件(调用递归函数)

特点:

自己调用自己,调用栈在内存叠加,如果没有返回条件,将无限循环调用,占用大量内存,最终爆栈终止进程。

还有一种高级一点的递归:

尾递归 (将结果也放入函数参数,内存里面调用栈只有一个当前运行的函数进程)

举个简单的例子: 阶乘f(n) = n!

def fact(x): #递归

if x == 1:

return 1

else:

return x * fact(x-1) #注意这里跟尾递归不同

#尾递归

def factorial(x,result):

if x == 1:

return result

else:

return factorial(x-1,x*result)

if __name__ == '__main__':

print(fact(5)) #5*4*3*2*1 = 120

print(factorial(5,1)) #120

四、快速排序 (分而治之策略)

每次选取数组中一个元素x当作分水岭(一般选取第一个元素):[小于元素x的数组]+[x]+[大于元素x的数组],然后递归调用,直到最后处理的数组元素只剩下零个或者一个

平均时间复杂度O(nlogn)

最差情况时间复杂度O(n^2) (出现这个情况是:快排的数组本来就是有序的(顺序/倒序),选取的元素又是开头第一个的话,每次变成只能处理一侧的数组了。 改善:可以选取数组中间的元素当作分水岭pivot,只有两边的元素就都能均匀处理了)

#!/usr/bin/python

def quicksort(array):

if len(array) < 2:

return array

else:

pivot = array[0]

less = [i for i in array[1:] if i <= pivot] #超级像伪代码!

print(less)

greater = [i for i in array[1:] if i > pivot]

print(greater)

return quicksort(less) + [pivot] + quicksort(greater)

if __name__ == '__main__':

print(quicksort([7,1,10,5,3,2,6]))

'''

[1, 5, 3, 2, 6]

[10]

[]

[5, 3, 2, 6]

[3, 2]

[6]

[2]

[]

[1, 2, 3, 5, 6, 7, 10]

'''

到目前算法为止,复杂度对比:

排序到算法有:

冒泡排序,选择排序,快速排序,归并排序,堆排序(感兴趣到小伙伴可以自己去搜索)

下面列出冒泡排序和归并排序算法:

#冒泡排序,每次寻找最小到元素往前排,就像汽水从下往上冒一样。所以叫冒泡排序啦

def simpleSort(array):

for i in range(len(array)-1):

for j in range(i,len(array)):

if array[i] > array[j]:

temp = array[i]

array[i] = array[j]

array[j] = temp

return array

print(simpleSort([9,8,6,7,4,5,3,11,2])) #[2, 3, 4, 5, 6, 7, 8, 9, 11]

冒泡排序时间复杂度O(n^2)

两个for循环搞定,每一轮for循环找到一个最小值。for循环两两元素对比交换

归并排序:

def mergeSort(array):

if len(array) < 2:

return array

else:

mid = int(len(array)/2)

left = mergeSort(array[:mid])

right = mergeSort(array[mid:])

return merge(left, right)

def merge(left, right): #并两个已排序好的列表,产生一个新的已排序好的列表

result = [] # 新的已排序好的列表

i = 0 # 下标

j = 0

# 对两个列表中的元素 两两对比

# 将最小的元素,放到result中,并对当前列表下标加1

while i < len(left) and j < len(right):

if left[i] <= right[j]:

result.append(left[i])

i += 1

else:

result.append(right[j])

j += 1

# 此时left或者right其中一个已经添加完毕,剩下的就全部加到result后面即可

result += left[i:]

result += right[j:]

return result

array = [9,5,3,0,6,2,7,1,4,8]

result = mergeSort(array)

print('排序后:',result) #排序后: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

归并排序时间复杂度是O(nlogn)

最坏情况也是O(nlogn)

后面还有很多,我就不一一列举了。这本书将深奥的知识用通俗易懂的语言表达出来,同时加上生动形象的配图,看了的都说好。

最后,学习Python中的小伙伴,需要学习资料的话,可以前往我的微信公众号:速学Python,后台回复:csdn,即可拿Python学习资料

这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。送给正在学习python的小伙伴!这里是python学习者聚集地,欢迎初学和进阶中的小伙伴!

读书笔记-算法图解(像小说一样有趣的算法入门书) 二分查找的速度比简单查找快得多。二分查找的小游戏:我在1-100中想一个数字,你猜,我告诉你大了或者小了或者正确。O(log n)比O(n)快。需要搜索的元素越多,前者比后者就快得越多。算法运行时间并不以秒为单位。算法运行时间是从其增速的角度度量的。算法运行时间用大O表示法表示。 阅读详情

相关推荐

Unity学习笔记之【IK反向动力学操作】

反向动力学,简称IK。相较于正向动力学,反向动力学旨在子级对父级产生的影响。使用IK,可以实现根据目标位置或方向来计算并调整角色的关节(骨骼)链,以使角色的末端(如手臂、腿部等)达到预期的位置或取向。通过使用 Unity 的 IK 功能,你可以实现各种复杂的角色动画效果,如角色抓取、足部对齐、手臂跟随等。 2. 将所视的目标物体拖拽绑定 4. 实现效果如下 :移动角色时注释立方体 实现效果如下

m0_47351846的博客 2954

python 列表循环 [i for i in array[0:] if i>2]在快速排序中的使用

1、[1,2,36]这个在python叫做列表并且列表支持print和+运算即: array=[1,5,7]+[6,8,2] priint(array) 结果为[1, 5, 7, 6, 8, 2] 2、[i for i in array[0:] if i>2]此为一个高效的循环判断并形成一个新的列表即: 从列表array的第0个元素开始判断是否大于2,如果大于2则放到一个新的列表中。 print([i for i in array[0:] if i>2])的结果为[5, 7, 6,.

Coder----Allen----Coder 3393

人工智能顶会投稿指南:CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期与影响力解析

本文详细解析了CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期与影响力,涵盖各会议的投稿时间线、评审特点及录用率。ACL注重自然语言处理,ICML强调机器学习理论,NeurIPS覆盖神经信息处理,ICLR聚焦表征学习。文章还提供了实战投稿策略,帮助研究者提升投稿成功率。

weixin_29211309的博客 3337

Python排序算法(六)——归并排序(MERGE-SORT)

有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的pythonhttps://www.cnblogs.com/xxtalhr/p/10800699.html 一、归并排序(MERGE-SORT)概念   归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divi...

小麦粒的Python 1905

别再只调API了!深度拆解Dify文件上传的两种传参方式(sys.file vs. inputs.upload_file)

本文深度解析Dify平台文件上传的两种传参方式——sys.file与inputs.upload_file,详细对比其设计原理、技术实现及适用场景。通过代码示例和性能分析,帮助开发者在本地大模型应用中做出精准技术选型,提升文件处理效率与系统稳定性。

weixin_29063979的博客 266

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

快速排序算法

def quicksort(array):if len(arrat) &lt; 2:return array   --基准条件else:pivot = array[0]   --递归条件less = [i for  i in array[1:] if i&lt;= pivot] --小于基准值的子数组greater = [i for i in array[1:] if i &gt; pivot] ...

LvKuiSir的博客 268

SQL面试题——抖音SQL面试题 股票波峰波谷

这个题目的难度比较低,我们是用lead 和 lag 两个函数就可以搞定,也就是在一个SQL 里面同时使用多个函数,问题的考查点在于对边界的考虑。

2万+

这10本Python与算法书,你绝对值得拥有!

你好,我是zhenguo1024 程序员节,感谢图灵出版社对Python与算法社区的支持,为大家提供了下面Python与算法图书的最大优惠,大家根据各自情况学习!算法书单1.算法(第4版)...

算法channel 6431

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2624

HALCON机器视觉之结合LMI Gocator 5504进行手机折叠屏异物、折痕和胶体检测(基于C# + HALCON)

手机折叠屏是一种创新的屏幕技术,它允许屏幕在一定程度上进行折叠,从而在便携性和屏幕尺寸之间取得平衡。这种屏幕通常由多层材料组成,包括柔性显示层、保护层和胶水层等。本文将详细介绍如何使用C#编程语言,结合HALCON和LMI Gocator 5504来实现手机折叠屏的异物、折痕和胶体检测。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 9317

像小说一样有趣的算法入门书—《算法图解》,零基础入门算法必备!

这本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;书中介绍的所有算法都非常实用,对我从事的软件工程师的工作大有帮助,还可为阅读更复杂的主题打下坚实的基础。通俗易懂,由浅入深,特别时候小白学习数据结构算法。本书最大的特点就是图多,充分体现了书名 算法“图”解,而不是算法“字”解,而且在每一章节之前会设定一个场景问题,从而引入合适的算法去求解。

m0_70615468的博客 652

SAP 系统升级不再惧怕 SPAU 与 SPDD:把修改调整做成可控的工程

SAP系统升级中的SPAU/SPDD处理要点:首先明确SPDD处理数据字典对象,SPAU处理程序对象,核心是解决标准对象变更与历史修改的继承问题。关键原则是优先回归标准版本,减少后续升级负担。操作时应利用版本管理对比差异,批量处理可回退对象,并通过F9多选提高效率。对于提示"当前版本与建议一致"的对象直接回归标准。注意区分新旧SPAU界面功能差异,将Note下载移至SNOTE处理,并确保在SPDD/SPAU之后处理SPAU_ENH。最后,所有调整需记录日志并纳入传输请求,确保可追溯性。遵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

《算法图解:想小说一样有趣的算法入门书》读书笔记(一)

这是一本看起来有趣的算法入门书,我打算边学边写博客,有兴趣的朋友可以一起学习,希望大家可以有所收获!

二一雨水的博客 1088

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

算法图解:像小说一样有趣的算法入门书

内容简介 本书示例丰富,图文并茂,以简明易懂的方式阐释了算法,旨在帮助程序员在日常项目中更好地利用算法为软件开发助力。前三章介绍算法基础,包括二分查找、大O 表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如何时采用贪婪算法或动态规划;散列表的应用;图算法;K 最近邻算法。 你一定能看懂的算法基础书 代码示例基于 Python ...

GitChat 2337

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

像小说一样有趣的算法入门书?

《图解算法》内容简介本书示例丰富,图文并茂,以简明易懂的方式阐释了算法,旨在帮助程序员在日常项目中更好地利用算法为软件开发助力。前三章介绍算法基础,包括二分查找、大O 表...

优快云人工智能头条 494

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《算法图解》让我们一起边读小说边入门算法

本书运用的大量的图片示例,推荐没有了解过算法的小白去阅读,真的是对新手相当友好了,唯一可惜的地方在于书中的代码实现是用的python2.7。

weixin_45797022的博客 1075

Python 学习,大家都在用这些书

9 月发布的 IEEE 榜单显示,2023 年 Python 依旧是最受欢迎的编程语言。似乎找不到一个 Python 无法触及到的领域,在 IT 行业以外,银行、医疗或其他场景也需要运用 Python 相关工具进行数据的分析和决策。图灵出版了很多 Python 领域相关的图书,并逐渐形成了一个完善的系统。其中有一些书得到了读者的认可,在业界形成了良好的口碑。为此我们构建了一份 Python 读书路...

图灵教育 196

好书推荐丨豆瓣评出9.2高分!Python编程入门就看蟒蛇书

在这日新月异的科技新时代,编程如同一把万能钥匙,为无数人打开了通向无限可能的大门。而在众多编程语言中,Python无疑是最耀眼夺目的巨星,凭借其简洁明了的语法和无比强大的功能,迅速成为全球最受欢迎的编程语言之一。Python之所以能够在短时间内风靡全球,秘诀在于它宛如宝库般的丰富生态系统,无论是Web开发、数据科学探索,还是自动化任务处理、游戏制作等,Python总能带来意想不到的便捷与惊喜。

AIGC 3万+

BAT算法工程师的成长之路,超详细的学习路线

算法的学习路线,主要分为 4 个部分:数学基础、编程能力、算法基础、实战。

Jack-Cui 3万+

算法入门,其实可以像读小说一样有趣

本文来源 | 《算法图解:像小说一样有趣的算法入门书》作者 | Aditya Bhargava责编 | 林瑟我一个非程序员,买了这本《算法图解》的书在看,刚拆快递后翻了一...

形势所逼,不进则退 371

基于Python+协同过滤算法的小说推荐系统设计与实现

随着世界经济信息化、全球网络化的到来推动信息线上管理的飞速发展,为小说推荐的管理起到关件作用。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的小说推荐系统,通过此网站爬虫技术获取数据。当前的银行用户行为管理存在工作效率低下,人员和资源调配不充分的问题,基于协同过滤算法的小说推荐系统目前还没有完善的系统机制。在此基础上运用新技术,构建了以 Django为基础的小说推荐管理体系。首先,以需求为依据,对目前传统的管理进行了较为详尽的了解和分析。

java李阳勇的博客 8762

python算法入门书籍推荐书目_10本算法入门书籍推荐

10本算法入门书籍推荐算法和数据结构是做计算机开发需要掌握的必不可少的基础知识,但是一上来就直接学习难免会遇到一些比较难啃的问题,所以今天就推荐10本算法入门书籍,适合刚开始学习的新手以及想要了解算法基础的同学。后续会有更深入的算法学习书籍推荐。01《算法图解》本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。对于初学者十分友好,概念拆解清晰。...

weixin_39551993的博客 1284

Python 学习,大家都在用这些书,还请收藏!

本书是 Python 领域备受推崇的经典作品,致力于帮助 Python 开发人员挖掘这门语言及相关程序库的优秀特性,写出简洁、流畅、易读、易维护,并且地道的 Python 代码。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

白帽阿叁的博客 409

02 《算法图解——像小说一样有趣的算法书》3

8 贪婪算法 贪婪算法的优点:简单易行!每步都采用最优的做法,每步都选择最优解,最终得到全局最优解。贪婪算法并非在任何地方行之有效,但它易于实现! 示例: 排课表 假设有如下课程表,你希望尽可能多的课程安排在某间教室上。 课程 开始时间 结束时间 美术 9 am 10 am 英语 9:30 am 10:30 am 数学 10 am 11 am 计算机 10:30 am 11:30 am 音乐 11 am 12 pm 具体的做法: (1)选出结束最早的课,它就是要在.

weixin_40737011的博客 266
上一篇: 2019年最终关注的10本Python和算法书单
下一篇: 世界上最好的Python编辑器是什么?我投 PyCharm一票
Python_1_3
博客等级 码龄8年 28粉丝 94原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值