cs算法数据结构
一碗姜汤
科学的世界谈不上真正的理解,你只是去习惯它。
展开
-
【算法】斐波那契数列 [递推,矩阵快速幂]
【代码】【算法】斐波那契数列 [递推,矩阵快速幂]原创 2024-01-18 11:43:29 · 393 阅读 · 0 评论 -
【面试笔试算法】——dijkstra算法
对于邻接表来说,也有一个最适合的算法——Dijkstra算法。Dijkstra算法是求解单源最短路径的算法。什么是单源?举个例子,Floyd算法是多源的,有多个源点,能求解从任意点到任意点的距离。而Dijkstra算法是单源,的只能有一个源点,然后从这个源点(起点)出发,求解到达任意点的距离。求解Dijkstra算法需要注意不能有负权边。这里额外提一个负环的概念:负环并不意味着环中每条边都是负权,而是说,环的总权值为负。存在负环也就没有最短路可言。(一直绕就行)下面举个简单的例子来说明D原创 2022-04-07 09:42:11 · 316 阅读 · 0 评论 -
【面试笔试算法】——最小生成树相关算法
一个生成树,总共n个结点,有n-1条边。所谓最小生成树,就是所有边权加在一起最小的一棵生成树。原创 2023-07-22 22:32:40 · 35 阅读 · 0 评论 -
经典匹配算法: KMP、Sunday与ShiftAnd
如果文本串中,出现了模式串中根本没出现过的字符,那么模式串应该向后移动整个模式串的长度。sunday算法适合处理在一篇文章中,查找一个单词。如果每次都向后这样子跳啊,sunday算法的时间复杂度最好能到达O(n/m),m是单词的长度,n是文章的长度。所以sunday算法在实际场景中是远优于kmp,远优于暴力匹配的。原创 2023-09-17 00:06:38 · 546 阅读 · 0 评论 -
归并排序:从二路到多路
我们所熟知的和都是非常优秀的排序算法。但是快速排序和归并排序的一个就是:快速排序是一种而归并排序是一种。假设递归的终止条件就是剩下三个以下的元素就可以排序了。完成了排序之后再复制回去。原创 2023-08-19 22:59:27 · 424 阅读 · 0 评论 -
【面试笔试算法】——深度优先搜索
搜索的本质:暴力枚举,尝试所有可能的方案。 深搜的特点:不撞南墙不回头。撞到南墙就回溯。 适用场景:判断连通性。代码:方向数组:int dir[4][2]={0,1,1,0,0,-1,-1,0};小技巧:地图从(1,1)点开始存,最外圈都是0,这样做的好处就是不用判断边界。#include <iostream>using namespace std;int n,m,sx,sy;//n,m:地图的宽和长,(sx,sy)起始点坐标int dir[4][2]={0,1原创 2022-04-07 10:31:53 · 222 阅读 · 0 评论 -
【面试笔试算法】——拓扑排序
就拿学习来说,学习有时候讲究先后顺序,就是你得先修完某个前导课程,你才能开启后续的更高阶的课程。我们可以把这样的关系反映到一张由结点和有向边构成的。拓扑排序就是遍历这张图中的所有结点,同时确保当遍历到每一个结点时,所有该节点的前置结点都已经遍历过了(:不断取出图中度为0的结点,然后所有被该结点所指的结点的入度-1。我们把遍历所有结点得到的顺序序列称为拓扑序列。同时我们还可以利用不能成环这一性质,所以拓扑排序的结果也不唯一。原创 2023-07-16 09:38:59 · 102 阅读 · 1 评论 -
【数据结构】——二分查找
二分查找有很多变体,比如找“最后一个1”,“第一个1”等。原创 2023-07-20 15:32:54 · 33 阅读 · 0 评论 -
【数据结构】——队列
队列的代码实现方式有两种:一种实现方式是连续内存的数组,一种实现方式是离散内存的链表。而循环队列一般采用连续内存的数组来实现。原创 2023-07-15 22:20:44 · 89 阅读 · 1 评论 -
梯度下降法查找抛物线极值
用到了一个随机数宏RADN_MAX。原创 2023-07-20 15:47:23 · 31 阅读 · 0 评论 -
【数据结构】——链表
链表实现、节点插入删除、双向链表、链表翻转。原创 2023-07-20 19:32:40 · 29 阅读 · 0 评论 -
【数据结构】——并查集
生活中有很多连通性问题。解决方案——并查集。原创 2023-07-19 14:32:51 · 54 阅读 · 0 评论 -
【数据结构】——经典排序算法
下面分别实现了插入排序、冒泡排序、归并排序、选择排序、快速排序以及快速排序的单边递归优化。排序算法由于比较基础,就放在数据结构这里了。原创 2023-07-20 13:20:00 · 24 阅读 · 0 评论 -
【数据结构】——二叉树
二叉树,其实只需要一个root的Node节点就可以完成对二叉树的基本所有操作,所以下面额外封装的Tree结构其实没什么必要。原创 2023-07-18 11:02:02 · 58 阅读 · 1 评论 -
【数据结构】——哈希表
2.课外练习:LeetCode题。用链表实现一个简单的哈希表。1.作业 海贼oj#274。原创 2023-07-20 16:45:07 · 33 阅读 · 0 评论 -
【数据结构】——广义表生成树
C语言代码,在tree.c的基础上完善,buildTree函数功能。原创 2023-07-18 22:17:40 · 188 阅读 · 0 评论 -
【数据结构】——线性表
线性表的创建、释放、插入、删除、扩容操作。原创 2023-07-21 00:28:54 · 31 阅读 · 0 评论 -
【数据结构】——堆
堆是算法刷题当中经常用到的数据结构,用C++甚至只需要一个set就行,但是我们最好还是知道堆的具体实现方式,心底才不至于空落落的。原创 2023-07-19 13:26:01 · 24 阅读 · 0 评论 -
【数据结构】——堆排序
对于一个大顶堆来说,堆顶维护的是最大值,每次从堆顶弹出一个元素,放到堆末,然后堆长度减一,堆自动维护堆的性质,即向下调整。反复循环这样的操作,我们就得到了一个有序序列。这种思想就是堆排序的思想。原创 2023-07-19 13:52:16 · 22 阅读 · 0 评论 -
【数据结构】——栈
包括了扩容操作。还有链表实现栈。原创 2023-07-20 18:11:03 · 28 阅读 · 0 评论 -
【数据结构】——树状数组
因为只要C[j+k]中的k小于lowbit(j),那么C[j+k]就不会包含C[j],而当k=lowbit(j)的时候,C[j+k]就会包含C[j]区间。8-----1000 1个1,只能分成一段:c[8] = a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8]4-----0100 1个1,只能分成一段:c[4] = a[1] + a[2] + a[3] + a[4]2-----0010 1个1,只能分成一段:c[2] = a[1] + a[2]原创 2023-04-21 11:48:47 · 54 阅读 · 0 评论 -
【数据结构】——线索树
线索树,就是充分利用了树中的闲置指针。整个构建线索树的过程就是一个中序遍历的过程,只不过在这个过程中维护了一个前驱结点。遍历线索树的结果也和中序遍历是一样的。原创 2023-07-19 14:28:08 · 101 阅读 · 0 评论 -
408重要数据结构+算法汇总——C语言手搓版(全)
该套代码,大学期间跟着网课一遍一遍打下来的,408大概就这些了,别的杂七杂八其实还有很多,遗憾的是,一直没有整理和归纳。导致一遍遍地学一遍遍地忘记。大四就快毕业了,研也考了,不知道以后的路会是什么样子。这里做个整理,算是给408一个小小的胶带吧。后续如果有缺漏还会弥补。请说明malloc、calloc、realloc三者的区别,并分别介绍用法malloc函数:malloc用于分配指定大小的内存块,并返回一个指向该内存块的指针。它只分配内存,不进行初始化。如果分配成功,则返回指向分配内存的指针原创 2024-01-09 10:49:02 · 2001 阅读 · 0 评论