算法
文章平均质量分 82
鱼鱼9901
这个作者很懒,什么都没留下…
展开
-
Hello算法笔记之回溯
一、回溯算法介绍:一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,当遇到正确的解则将其记录,直到找到解或者尝试了所有可能的选择都无法找到解为止。给定 n 个皇后和一个 N×N 大小的棋盘,寻找使得所有皇后之间无法相互攻击的摆放方案。当走过左下角的节点之后,就会从路径中删掉左下角这个点,并且回到左下角的父节点,进行root.right的遍历,以此类推。复杂的回溯问题还可以加一些约束条件,如例题三:在二叉树中搜索所有值为 7 的节点,返回根节点到这些节点的路径,原创 2023-06-28 22:57:54 · 733 阅读 · 0 评论 -
hello算法学习笔记之排序
时间复杂度O(nlogn),自适应排序(在最差情况下,每轮哨兵划分操作都将长度为 n的数组划分为长度为 0和 n - 1 的两个子数组,使用O(n^2)时间,空间复杂度O(n)(在输入数组完全倒序的情况下,达到最差递归深度 \(n\) ,使用 O(n) 栈帧空间),原地排序,非稳定性排序(在哨兵划分的最后一步,基准数可能会被交换至相等元素的右侧)时间复杂度O(nlogn),非自适应排序,空间复杂度O(1),原地排序,非稳定性排序(在交换堆顶元素和堆底元素时,相等元素的相对位置可能发生变化。原创 2023-06-27 23:21:30 · 987 阅读 · 0 评论 -
Hello算法学习笔记之搜索
一、二分查找1.从数组中找到target的索引注意:while条件是<= O(logn)二分查找并非适用于所有情况,原因如下:二分查找仅适用于有序数据。若输入数据无序,为了使用二分查找而专门进行排序,得不偿失。因为排序算法的时间复杂度通常为\(O(n \log n)\),比线性查找和二分查找都更高。对于频繁插入元素的场景,为保持数组有序性,需要将元素插入到特定位置,时间复杂度为\(O(n)\),也是非常昂贵的。 二分查找仅适用于数组。二分查找需要跳跃式(非连续地)访问原创 2023-06-25 21:13:29 · 562 阅读 · 0 评论 -
hello算法笔记之图
与树类似,图的遍历方式也可分为两种,即「广度优先遍历 Breadth-First Traversal」和「深度优先遍历 Depth-First Traversal」,也称为「广度优先搜索 Breadth-First Search」和「深度优先搜索 Depth-First Search」,简称 BFS 和 DFS。第 i条链表对应顶点i,其中存储了该顶点的所有邻接顶点(即与该顶点相连的顶点)。从某个顶点出发,先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻接顶点,以此类推,直至所有顶点访问完毕。原创 2023-06-24 23:06:11 · 1138 阅读 · 0 评论 -
hello算法笔记之堆
具体来说,我们比较插入节点与其父节点的值,如果插入节点更大,则将它们交换。swap那里换的是i和ma索引对应的值,但是i和ma这两个索引没变,后面i=ma才是相当于把指针(索引)挪到子节点处,让i和ma指向同一个子节点。大顶堆在入栈的时候*-1颠倒大小关系,max_heap[0]是最小的数(负数形式),取出的时候再乘回-1,变成正数,是最大的数。堆由于满足完全二叉树,所以很适合用数组储存(地址连续)当使用数组表示二叉树时,元素代表节点值,索引代表节点在二叉树中的位置。,我们首先将其添加到堆底。原创 2023-06-23 20:54:08 · 842 阅读 · 0 评论 -
hello算法笔记之树
节点的「平衡因子 Balance Factor」定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因子为 0。知识点3、删除节点O(logn):当待删除节点的子节点数量 =0 时,表示待删除节点是叶节点,可以直接删除;AVL 树的特点在于「旋转 Rotation」操作,它能够在不影响二叉树的中序遍历序列的前提下,使失衡节点重新恢复平衡。红黑树的平衡条件相对宽松,因此在红黑树中插入与删除节点所需的旋转操作相对较少,在节点增删操作上的平均效率高于 AVL 树。最底层节点尽量靠左填充。原创 2023-06-22 22:58:09 · 732 阅读 · 0 评论 -
HELLO算法笔记之散列表(哈希)
对哈希的解释:对 1 个对象进行 Hash,就可以得到这个对象的一个映射值,这个映射值其实就是 Hash 值,这值转换存到数组的某个位置中,就是放到桶中。「开放寻址 Open Addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主要包括线性探测、平方探测、多次哈希。「负载因子 Load Factor」是一个重要概念,其定义为哈希表的元素数量除以桶数量,为了衡量哈希冲突的严重程度,类似于数组扩容,哈希表扩容需将所有键值对从原哈希表迁移至新哈希表,非常耗时。原创 2023-06-17 23:32:55 · 969 阅读 · 2 评论 -
hello算法笔记之栈与队列
实现“首尾相连”:rear: int = (self.__front + self.__size) % self.capacity() self.__nums[rear] = num。队列仅能在头部删除或在尾部添加元素。而双向队列deque允许在头部和尾部执行元素的添加或删除操作。由于数组删除首元素的时间复杂度为O(n) ,这会导致出队操作效率较低。遵循先入先出(First In, First Out)规则的线性数据结构。遵循先入后出(First In, Last Out)原则的线性数据结构。原创 2023-06-17 00:05:22 · 350 阅读 · 0 评论 -
Hello算法学习之数据结构
它使用 7 位二进制数(即一个字节的低 7 位)表示一个字符,最多能够表示 128 个不同的字符。,使用 1 到 4 个字节来表示一个字符,根据字符的复杂性而变。ASCII 字符只需要 1 个字节,拉丁字母和希腊字母需要 2 个字节,常用的中文字符需要 3 个字节,其他的一些生僻字符需要 4 个字节。(所以会产生一个问题,当给计算机8位的编码时,它怎么能知道这是一个2字节的字符,还是两个1字节的字符呢?在庞大的 Unicode 字符集中,常用的字符占用 2 字节,有些生僻的字符占 3 字节甚至 4 字节。原创 2023-06-12 23:09:02 · 940 阅读 · 0 评论 -
leetcode学习之时间复杂度及刷题解析
7.两层循环相互独立,第一层和第二层时间复杂度分别为 O(logN) 和 O(N) ,则总体时间复杂度为 O(NlogN)以此类推,那么循环次数就=n+(n-1)+(n-2)···+2+1=1/2*n²+1/2 n,复杂度也为O(N²)N=3的时候,T=3*2*1(在range(3)里面,有0,1,2三个数,其中2的T是2*1,1和0的T是1)N=2的时候 T=2*1(在range(2)里面,有0和1两个数,而0和1的T都=1)3.两层循环相互独立,都与 N 呈线性关系,时间复杂度即为O(N²)原创 2023-05-31 20:44:23 · 154 阅读 · 0 评论