【算法图解】【读书笔记】
第一章、算法简介
1、二分查找
说明:二分查找是一种算法,其输入一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null。
def binary_search(list0,n):low=0high=len(list0)-1while low<=high:mid=(low+high)//2if n==list0[mid]:return midif n<list0[mid]:high=mid-1else:low=mid+1return Nonelist0=[2,4,5,8,10,12,13,14,18,22,28]
n=6
print(binary_search(list0,18))
2、一些常见的大O运行时间及图表
第二章、选择排序
def find_smallest(list0):smallest=list0[0]index_smallest=0for i in range(1,len(list0)):if list0[i]<smallest:smallest=list0[i]index_smallest=ireturn index_smallestdef selectionSort(list0):res=[]for i in range(len(list0)):var=find_smallest(list0)res.append(list0.pop(var))return reslist0=[8,10,12,13,22,18,2,4,5,14,28]
print(selectionSort(list0))
第三章、递归
递归求和
def count(arr):if not arr:return 0else:return arr[0]+count(arr[1:])
第四章、快速排序
分治法思想:
1、找出基线条件;
2、缩小问题规模,使之符合基线条件;
快速排序步骤:
1、选择基准值;
2、将数组分成两个子数组;
3、对这两个子数组进行快速排序;
def quicksort(list0):if len(list0)<2:return list0pivot=list0[0]less=[i for i in list0[1:] if i<=pivot]more=[i for i in list0[1:] if i>pivot]return quicksort(less)+[pivot]+quicksort(more)print(quicksort([4,6,1,2,9,6,7]))
第六章、广度优先算法
广度优先算法解决两个问题:
1、从节点A出发是否有前往节点B的路径;
2、从节点A出发前往节点B的哪条路径最短;
书中示例
from collections import dequegraph = {}
graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []def search(name):search_queue=deque()search_queue+=graph[name]searched=[]while search_queue:person=search_queue.popleft()if person not in searched:if test(person):return personelse:search_queue+=graph[person]searched.append(person)return Nonedef test(person):return person[-1]=='m'print(search('you'))
第七章、迪杰斯特拉算法
迪杰斯特拉算法包含四个步骤:
1、找出“最便宜”的节点,即可在最短时间内到达的节点;
2、更新该节点的邻居的开销;
3、重复这个过程,直到图中每个节点都涉及到;
4、计算最终路径;
书中示例
#图
graph={}
graph["start"]={}
graph["start"]["a"] = 6
graph["start"]["b"] = 2graph["a"] = {}
graph["a"]["fin"] = 1graph["b"] = {}
graph["b"]["a"] = 3
graph["b"]["fin"] = 5
graph["fin"] = {}#节点开销
infinity = float("inf")
costs = {}
costs["a"] = 6
costs["b"] = 2
costs["fin"] = infinity#存储父节点
parents = {}
parents["a"] = "start"
parents["b"] = "start"
parents["fin"] = None#已处理节点
processed = []#找到未被处理的开销最小节点
def find_lowest_cost_node(costs):lowest_cost=float("inf")lowest_cost_node=Nonefor node in costs:if node not in processed:if costs[node]<lowest_cost:lowest_cost=costs[node]lowest_cost_node=nodereturn lowest_cost_node#迪杰斯特拉算法
node=find_lowest_cost_node(costs)
while node:cost=costs[node]for k in graph[node].keys():new_cost=cost+graph[node][k]if new_cost<costs[k]:costs[k]=new_costparents[k]=nodeprocessed.append(node)node=find_lowest_cost_node(costs)print(costs)
print(parents)
第八章、贪婪算法
书中示例
states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"])
stations = {}
stations["kone"] = set(["id", "nv", "ut"])
stations["ktwo"] = set(["wa", "id", "mt"])
stations["kthree"] = set(["or", "nv", "ca"])
stations["kfour"] = set(["nv", "ut"])
stations["kfive"] = set(["ca", "az"])
final_stations = set()while states_needed:best_station = Nonestates_covered = set()for station, states_for_station in stations.items():covered = states_needed & states_for_stationif len(covered)>len(states_covered):best_station=stationstates_covered=coveredfinal_stations.add(best_station)states_needed-=states_coveredprint(final_stations)
【算法图解】【读书笔记】相关推荐
- 算法图解读书笔记:附程序
算法图解通俗易懂,下面是随书练习程序,基于python3 二分法 #二分法 def binary_search(list, item):low = 0high = len(list)-1while l ...
- 算法图解 读书笔记(上)
最近看了一本算法入门书--算法图解. 封面的插画很好玩儿.最吸引我的还是封面里的一句话:向小说一样有趣的算法入门书. 上个封面,大家感受一下: 一.算法简介 1.1 二分查找 一个有序数组中找一个数的 ...
- 算法图解——读书笔记06
广度优先搜索 首先,先介绍一下什么是图(它们不涉及X轴和Y轴),再介绍第一种图算法--广度优先搜素(breadth-frist search,BFS). 广度优先搜素让你能够找出两样东西之间的最短距离 ...
- 算法导论读书笔记(8)
算法导论读书笔记(8) 目录 计数排序 计数排序的简单Java实现 基数排序 基数排序的简单Java实现 桶排序 计数排序 计数排序 假设 n 个输入元素中的每一个都是介于0到 k 之间的整数,此处 ...
- 算法导论读书笔记(7)
算法导论读书笔记(7) 目录 快速排序 快速排序的简单Java实现 快速排序的性能 最坏情况划分 最佳情况划分 快速排序的随机化版本 比较排序 快速排序 快速排序是一种原地排序算法,对包含 n 个数的 ...
- 《漫画算法》读书笔记
<漫画算法>读书笔记 在图书馆借阅算法书时,看到了一本非常吸引我的算法书--<漫画算法>.算法还能以漫画的方式展示出来吗?我带着我的疑惑翻开了这本书,里面的语言非常接地气,通俗 ...
- 算法导论读书笔记(19)
http://www.cnblogs.com/sungoshawk/p/3802553.html 算法导论读书笔记(19) 目录 最优二叉搜索树 步骤1:一棵最优二叉查找树的结构 步骤2:一个递归解 ...
- 《BIG DATA大数据日知录 架构和算法》读书笔记
2019独角兽企业重金招聘Python工程师标准>>> <BIG DATA大数据日知录 架构和算法>读书笔记 博客分类: 架构 分布式计算 1.数据分片和路由 Hash ...
- 重构机器学习算法的知识体系 - 《终极算法》读书笔记
2019独角兽企业重金招聘Python工程师标准>>> 最近有幸从图书馆借阅了Pedro Domingos的<The Master Alogrithm>一书,这本书的中文 ...
- 4.1《算法图解》笔记——Chapter 6 Breadth-First Search
算法图解笔记--Chapter 6 Breadth-First Search Author: Seven Zou Email: zoushiqi0404@gmail.com Language: Pyt ...
最新文章
- 我很欣慰,Vista下终于能用rose了
- 每日一皮:别放弃,再坚持一下就到成功的彼岸...
- java一个源文件供一个程序_java02 Java源文件范例提供了一个布局合理的Java程序范例 - 下载 - 搜珍网...
- Vivado工程文件分类
- 剑指Offer - 面试题58 - II. 左旋转字符串
- 计算机考试要怎么学,计算机二级该如何自学备考?千万不能大意!
- [RK3399][Android7.1] 基于regmap的I2C实现方法
- 2019蓝桥:奇数倍数问题
- Android网络优化--概括
- ipadpro尺寸的html,iPad Pro屏幕尺寸是多少?iPad Pro分辨率是多少?
- C. Two Shuffled Sequences
- C++搜索N皇后问题
- QColor类的使用
- oracle实验报告4:Oracle数据库模式对象管理(含实验小结)
- 如何让一个内向的人锻炼与人交流能力?
- matlab 光场相机透镜中心,DiffuserCam——一款不需要光学透镜的低成本光场相机
- Using SystemTap
- PIM-SM原理(ASM)
- CSS动画实现3D隧道效果
- kmp总结(相关例题1. Simpsons’ Hidden Talents 2.Oulipo)
热门文章
- sharepoint 创建网页服务器,在网站主页中配置SharePoint Server 2019网站创建 - SharePoint Server | Microsoft Docs...
- 【学习笔记】Unity3d C# 常用标签[xxx]
- shopify是什么?
- Python 户外俱乐部·登顶纪念证书生成器
- Hudi学习二:Hudi基本概念
- ubuntu强制重启
- JAVA从入门到入土(引入篇)
- LangChain-Agents 入门指南
- 办公软件系列 之excel应用4
- 重磅 | 就在刚刚,吴恩达最新的《AI 转型指南》正式出炉!