《算法图解》读书笔记

这是一篇关于《算法图解》的读书笔记,涵盖了大O表示法、选择排序、递归、快速排序、散列表、广度优先搜索、狄克斯特拉算法和动态规划等核心概念。笔记详细解释了算法的重要性,比如大O表示法用于衡量算法效率,快速排序的平均运行时间为O(n log n),散列表提供O(1)的查找、插入和删除速度,而动态规划则用于寻找最优解。此外,笔记还探讨了K最近邻算法及其在机器学习中的应用。
摘要由CSDN通过智能技术生成

这是一本很入门的算法书,介绍的东西还算简单明了,大体补充了一些自己没理解的东西.
粗略地看了一下,感觉还是"纸上得来终觉浅,绝知此事要躬行!"

<<算法图解>>读书笔记

1.算法介绍

大O表示法

O(n)线性时间,简单查找,n表示操作数

O(log n)对数时间,二分查找

O(n * log n)快速排序

O(n^2)选择排序

O(n!)旅行商问题

在这里插入图片描述

  • 算法的速度指的并非时间,而是操作数的增速。
  • 谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
  • 算法的运行时间用大O表示法表示。
  • O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多

2.选择排序

数组

数组的元素都在一起

  • 优点:
    • 读取数据很快
  • 缺点:
    • 事件超出数组长度,需要转移
    • 如果预留额外空间,会造成内存的浪费
链表

链表的元素是分开的,其中每个元素都存储了下一个元素的地址

  • 优点:
    • 插入和删除速度很快
  • 缺点:
    • 读取链表最后一个元素,无法直接读取

常见数组和链表操作的运行时间

在这里插入图片描述

O(n)线性时间 ; O(1)常量时间

链表擅长插入和删除,而数组擅长随机访问

3.递归

每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。
递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。

压入和弹出

调用栈可能很长,这将占用大量的内存。

4. 快速排序

(divide and conquer&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值