第一章、算法简介

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)

【算法图解】【读书笔记】相关推荐

  1. 算法图解读书笔记:附程序

    算法图解通俗易懂,下面是随书练习程序,基于python3 二分法 #二分法 def binary_search(list, item):low = 0high = len(list)-1while l ...

  2. 算法图解 读书笔记(上)

    最近看了一本算法入门书--算法图解. 封面的插画很好玩儿.最吸引我的还是封面里的一句话:向小说一样有趣的算法入门书. 上个封面,大家感受一下: 一.算法简介 1.1 二分查找 一个有序数组中找一个数的 ...

  3. 算法图解——读书笔记06

    广度优先搜索 首先,先介绍一下什么是图(它们不涉及X轴和Y轴),再介绍第一种图算法--广度优先搜素(breadth-frist search,BFS). 广度优先搜素让你能够找出两样东西之间的最短距离 ...

  4. 算法导论读书笔记(8)

    算法导论读书笔记(8) 目录 计数排序 计数排序的简单Java实现 基数排序 基数排序的简单Java实现 桶排序 计数排序 计数排序 假设 n 个输入元素中的每一个都是介于0到 k 之间的整数,此处 ...

  5. 算法导论读书笔记(7)

    算法导论读书笔记(7) 目录 快速排序 快速排序的简单Java实现 快速排序的性能 最坏情况划分 最佳情况划分 快速排序的随机化版本 比较排序 快速排序 快速排序是一种原地排序算法,对包含 n 个数的 ...

  6. 《漫画算法》读书笔记

    <漫画算法>读书笔记 在图书馆借阅算法书时,看到了一本非常吸引我的算法书--<漫画算法>.算法还能以漫画的方式展示出来吗?我带着我的疑惑翻开了这本书,里面的语言非常接地气,通俗 ...

  7. 算法导论读书笔记(19)

    http://www.cnblogs.com/sungoshawk/p/3802553.html 算法导论读书笔记(19) 目录 最优二叉搜索树 步骤1:一棵最优二叉查找树的结构 步骤2:一个递归解 ...

  8. 《BIG DATA大数据日知录 架构和算法》读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> <BIG DATA大数据日知录 架构和算法>读书笔记 博客分类: 架构 分布式计算 1.数据分片和路由 Hash ...

  9. 重构机器学习算法的知识体系 - 《终极算法》读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> 最近有幸从图书馆借阅了Pedro Domingos的<The Master Alogrithm>一书,这本书的中文 ...

  10. 4.1《算法图解》笔记——Chapter 6 Breadth-First Search

    算法图解笔记--Chapter 6 Breadth-First Search Author: Seven Zou Email: zoushiqi0404@gmail.com Language: Pyt ...

最新文章

  1. 我很欣慰,Vista下终于能用rose了
  2. 每日一皮:别放弃,再坚持一下就到成功的彼岸...
  3. java一个源文件供一个程序_java02 Java源文件范例提供了一个布局合理的Java程序范例 - 下载 - 搜珍网...
  4. Vivado工程文件分类
  5. 剑指Offer - 面试题58 - II. 左旋转字符串
  6. 计算机考试要怎么学,计算机二级该如何自学备考?千万不能大意!
  7. [RK3399][Android7.1] 基于regmap的I2C实现方法
  8. 2019蓝桥:奇数倍数问题
  9. Android网络优化--概括
  10. ipadpro尺寸的html,iPad Pro屏幕尺寸是多少?iPad Pro分辨率是多少?
  11. C. Two Shuffled Sequences
  12. C++搜索N皇后问题
  13. QColor类的使用
  14. oracle实验报告4:Oracle数据库模式对象管理(含实验小结)
  15. 如何让一个内向的人锻炼与人交流能力?
  16. matlab 光场相机透镜中心,DiffuserCam——一款不需要光学透镜的低成本光场相机
  17. Using SystemTap
  18. PIM-SM原理(ASM)
  19. CSS动画实现3D隧道效果
  20. kmp总结(相关例题1. Simpsons’ Hidden Talents 2.Oulipo)

热门文章

  1. sharepoint 创建网页服务器,在网站主页中配置SharePoint Server 2019网站创建 - SharePoint Server | Microsoft Docs...
  2. 【学习笔记】Unity3d C# 常用标签[xxx]
  3. shopify是什么?
  4. Python 户外俱乐部·登顶纪念证书生成器
  5. Hudi学习二:Hudi基本概念
  6. ubuntu强制重启
  7. JAVA从入门到入土(引入篇)
  8. LangChain-Agents 入门指南
  9. 办公软件系列 之excel应用4
  10. 重磅 | 就在刚刚,吴恩达最新的《AI 转型指南》正式出炉!