《算法图解》

本书深入浅出地介绍了算法的基础知识,包括选择排序、递归、快速排序、散列表、广度优先搜索、狄克斯特拉算法等。通过实例讲解了算法在实际问题中的应用,如旅行商问题、Facebook用户创建、DNS解析等。此外,还探讨了动态规划、K最近邻算法和未来的算法学习方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第 01 章——算法简介

二分查找(有序序列)

大O表示法:表示最坏条件下,操作数的增速

常见大O运行时间(快到慢)

  • O(logn):对数时间,二分查找
  • O(n):线性时间,简单查找
  • O(n*logn):快速排序
  • O(n^2):选择排序
  • O(n!):旅行商问题

实例

旅行商问题:前往n个地点,总旅程的最短路线。

 

第 02 章——选择排序

数组:内存连续,查询快,增删元素慢

链表:内存不连续,查询慢,增删元素快

链表数组:查询,增删元素介于数组和链表

选择排序:(1/2)n^2 #大O表示法忽略常数

 

实例

Facebook创建用户时,用链表数组:26个数组元素里面存放链表

 

第 03 章——递归

递归:调用自己

  • 基准条件(base)
  • 递归条件(recursive)

调用栈(call stack):先进后出,只有压入和弹出操作,内存占用可能很大

调用另外一个函数时,当前函数暂停,处于未完成状态

递归也调用了栈,当不为基准条件时,压入,为基准条件时,弹出

 

第 04 章——快速排序

分而治之(divide and conquer,D&C)

  • 找出基准条件,尽量简单
  • 不断分解问题(或缩小规模),直到符合基准条件

欧几里得算法

函数式编程

快速排序

  • 选择一个元素,作为基准值(pivot)
  • 按<、>基准值,进行分区(partitioning)
  • 对<、>基准值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值