前言

大家好,我是bigsai,很早就在写博客,将文章整理成了一个pdf,并且开源到github上!

自己写东西断断续续也不少时间了,也写了不少东西(虽然是偏向小白),这个其实花费的时间还是比较多的,这次的话主要将数据结构与算法中一些文章整理出来,初步整理成一版pdf,先分享给大家。

因为在整理pdf方面没啥经验,目前还是md直接导出的pdf的,看了下有些部分代码太长太占页面,有些部分图片太长也很占地方,有部分文章还尝试不同风格显得不那么条理,有些地方页面突然分割也很影响视觉体验……

虽然有很多缺点和问题,这些地方后面也在想办法考虑一点点优化,也欢迎大伙提出宝贵的意见!当然这个仓库也是开源的,有兴趣一起维护的可以维护。

更新会同步到Github仓库中,也会告知大家。近期会将以前写的其他数据结构算法部分(未优化)优化更新上去。

github地址https://github.com/javasmall/bigsai-algorithm

主要内容

  1. 理论基础搭建

    • 绪论基础知识:理解数据结构的相关概念,熟悉时间复杂度和空间复杂度。
    • 写给小白硬核递归:通过解决经典问题,深入理解递归,掌握记忆化递归的妙用。
  2. 线性结构的掌握

    • 图解线性表:手写顺序表和链表,理解带头结点和不带头结点链表的实现区别。
    • 图解双链表:手写双链表,考虑好节点直接联系,特别是考研重点。
  3. 栈与队列的熟练使用

    • :掌握后进先出规则,实现上用顺序表和链表考虑区别。
    • 队列:理解先进先出规则,实现上使用循环数组和链表分别实现。
  4. 更高级的线性结构

    • 跳表:了解跳表的增删改查原理和流程,拓宽对链表的认识。

    • 约瑟夫环问题:通过链表法、List模拟、公式法逐步深入这个问题。

  5. 树的深入学习

    • 二叉树层序遍历:学会使用队列进行层序遍历,解决二叉树之字形遍历。
    • 二叉树前中后遍历:熟练掌握非递归方式遍历,建立对树结构的全面理解。
    • 二叉搜索(查找)树:学会查找方式和删除节点逻辑。
    • 二叉平衡(AVL)树:了解平衡二叉树的旋转方式,以及不同平衡方式的应用。
  6. 其他重要数据结构

    • 哈夫曼树:理解哈夫曼树的weight计算方式和哈夫曼编码。
    • 字典(Trie)树:手写字典树,熟悉其应用场景和优势。
    • 优先队列:了解借助堆的运行原理。
    • 并查集(不相交集合):手写并查集,理解路径压缩的优势。
  7. 问题解决方法的学习

    • 回溯算法:通过解经典问题如八皇后问题,深刻理解回溯思想。
    • 分治算法:学会先分后合并,解决经典问题如二分搜索、快排、归并排序、最近点对等。
    • 搜索算法:深度优先搜索、广度优先搜索,解决问题如蓝桥杯,提高解决实际问题的能力。
    • 拓扑排序:理解图论算法,得到一个前后的顺序序列。
    • Dijkstra算法:了解图论单源最短路径,队列+贪心实现。
    • Floyd算法:了解图论多源最短路径,代码简短但需要深刻理解。
    • 最小生成树算法:Prim和Kruskal,了解不同贪心策略的应用。
  8. 位运算与数论算法

    • 位运算:介绍几种位运算,解决大部分经典位运算问题。
    • 求素数:掌握素数筛和欧拉筛的应用。
    • 快速幂:数论算法,掌握非递归、递归写法,了解矩阵快速幂。
  9. 大数运算

    • 大数加减乘除:手写大数运算,了解大数除法的思想。

  10. 十大排序算法

    • 冒泡排序、快速排序:了解交换类排序的原理和应用。
    • 插入排序、希尔排序:理解插入类排序的方法和优势。
    • 归并排序:学会归并类排序的实现。
    • 简单选择排序、堆排序:掌握选择类排序的原理。
    • 桶排序、计数排序、基数排序:了解桶类排序的应用场景和实现。
    • 双轴快排:优化快排的方法,深入理解排序算法的差异。

推荐资料

  1. 书籍

    • 《算法导论》:经典之作,系统全面地介绍了算法和数据结构。
    • 《数据结构与算法分析》:作者Mark Allen Weiss,深入浅出地讲解数据结构与算法。
    • 《剑指Offer》:针对面试算法题的详尽解析,适合入门和面试准备。
  2. 在线教程
    • LeetCode:刷题神器

github地址https://github.com/javasmall/bigsai-algorithm

持续更新中,欢迎star支持 !

历时三年,写的一本数据结构与算法pdf,开源了!的更多相关文章

  1. JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)

    1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...

  2. JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)

    前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...

  3. JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝

    前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScri ...

  4. JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  5. JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  6. JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  7. JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

    1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...

  8. 《数据结构与算法之美》 <05>链表(下):如何轻松写出正确的链表代码?

    想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转.有序链表合并等,写的时候非常容易出错.从我上百场面试的经验来看,能把“链表反转”这几行代码写对的人不足 10%. 为什么链表代 ...

  9. 数据结构与算法 Big O 备忘录与现实

    不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新.        算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...

  10. 用python语言讲解数据结构与算法

    写在前面的话:关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem ...

随机推荐

  1. Java 调用gdal API(二)——栅格裁剪

    gdal可以说是GIS数据处理比较好的工具之一,虽然也提供了Java API,但是官方文档确实太过简单,用起来确实太难受,每次都需要去参考对应的C++api,然后在对应使用. 因此小编决定从这篇文章开 ...

  2. flex布局入门

    一.简介 Flexible 单词意思是灵活的意思,flex布局又称为弹性布局或弹性盒子布局 Flex布局(Flexible Box Layout)是CSS3引入的一种布局模型,它旨在提供一种灵活且高效 ...

  3. ip2location.py

    import re import geoip2.database from tabulate import tabulate from matplotlib import pyplot as plt ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (70)-- 算法导论6.5 9题

    九.请设计一个时间复杂度为 (n lgk)的算法,它能够将 k 个有序链表合并为一个有序链表,这里 n 是所有输入链表包含的总的元素个数.(提示:使用最小堆来完成 k 路归并. 文心一言: 要设计一个 ...

  5. 如何用IoT边缘连接器实现云端应用控制PLC?

    本文分享自华为云社区<数字工厂深入浅出系列(十):IoT边缘连接器实现云端应用控制PLC>,作者: 云起MAE. 通过IoT云平台和边缘计算的技术设施,工厂可以将PLC等OT过程制造控制器 ...

  6. coredns使用etcd

    前言 CoreDNS使用ETCD存储主机记录.etcd安装略过. Corefile内容 .:53 { # 绑定本机IP bind 192.168.1.2 # etcd地址 etcd { path /c ...

  7. Docker Dockerfile指令大全

    FROM-指定基础镜像 指定基础镜像,并且Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令. # 语法格式 FROM < ...

  8. SpringBoot + Redis + Token 解决接口幂等性问题

    前言 SpringBoot实现接口幂等性的方案有很多,其中最常用的一种就是 token + redis 方式来实现. 下面我就通过一个案例代码,帮大家理解这种实现逻辑. 原理 前端获取服务端getTo ...

  9. 音频格式轻松转 - foobar2000

    一.foobar2000简介 foobar2000 是一款免费的专业级别音频解码播放器,支持的诸多音频格式,可加载附加组件扩展更多支持. 除了解码以外,可轻松实现对音频格式的转换,支持几乎所有主流格式 ...

  10. Solution Set -「ABC 183」

    本来十分抗拒,但 GM 强制. 「ABC 183A」ReLU Link. 略. #include<cstdio> int main() { long long n; scanf(" ...