随笔分类 - 数据结构与算法
摘要:算法——分治法 1 算法思想 将一个规模为 n 的问题划分为 k 个规模较小的子问题,这些子问题独立且与原问题相同。然后通过递归解决这些子问题,将子问题的解合并得到原问题的解。 \[ T(n)=\begin{cases}O(1) & n=1 \\ kT(\lfloor n/m \rfloor)+f(
阅读全文
摘要:算法—单调栈小结 前言 在leetcode刷题的时候遇到了503. 下一个更大元素 II。一开始是使用暴力解法,会因为$O(n^2)$的时间复杂度而导致超时。看了题解之后了解了单调栈相关的知识,运用单调栈的方法可以在$O(n)$时间内解决这个问题。 单调栈 单调栈是在栈的FILO(先进后出)的特性在
阅读全文
摘要:字符串排序 1.低位优先的字符串排序(LSD) 低位优先的字符串排序是从右到左依次检查键中的字符,这种方法适用于键的长度都相同的字符串。 假设字符串的长度都为w,那么就从右向左按基数排序的方法排序w遍。 代码实现: //低位优先排序 template <typename T> void LSD(ve
阅读全文
摘要:最短路径 最短路径是在加权有向图中,找到从一个顶点到达另一个顶点的成本最小的路径 1.加权有向图的数据结构 加权有向边 代码实现: //加权有向边 class DirectedEdge { private: int vertax_from; //边的起点 int vertax_to; //边的终点
阅读全文
摘要:最小生成树 1.最小生成树(minimum spanning tree) 定义:给定一幅加权无向图,找到一棵权值最小的生成树 生成树:图的生成树是一棵含有其所有结点的无环连通子图 橙色部分即为该图的最小生成树 2.加权无向图的数据结构 加权边 代码实现 class Edge { private: i
阅读全文
摘要:有向图 1.有向图的定义 有向图:由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点。 有向路径:由一系列顶点组成,对于其中的每个顶点都存在一条有向边从它指向序列的下一个顶点。 有向环:一条至少含有一条边且起点终点都相同的有向路径 可达性:存在从顶点v到顶点w的路径,使顶点w能从
阅读全文
摘要:无向图 1.无向图的定义 无向图的定义:由一组顶点和一组能将两个顶点相连的没有方向的边组成 自环:一条连接一个顶点和自身的边 平行边:连接同一对顶点的两条边 顶点的度数:依附于这个点的边的总数 子图:一幅图的所有边的一个子集 连通图:从任意一个顶点都存在一条路径到达另一个任意顶点,则该图则为连通图
阅读全文
摘要:1.1 散列表(哈希表) 散列表(哈希表)是根据键值而直接进行访问的数据结构。通过一个散列函数将查找的键转换为表中的一个索引,来加快查找的速度。理想情况下,不同的键值都能转化为不同的索引值,但是在现实中,我们常常要处理多个键值对应同一个索引值。所以,散列查找的算法分为两个部分。第一部分就是关键的散列
阅读全文
摘要:1.二叉查找树 二叉查找树是一颗二叉树,其中每一个结点都含有一个可比较的键以及相关联的值,并且每个结点的键都大于左子树的任意结点的键而小于右子树的任意结点的键 图1.二叉查找树.jpg 结点定义 template <typename T> class BSTNode { public: int ke
阅读全文
摘要:470.用Rand7()实现Rand10() 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。 示例 1: 输入: 1 输出: [7] 示例 2: 输入: 2 输出
阅读全文
摘要:排序 1. 初级排序 1.1选择排序 算法思想 找到数组中最小的元素,将其与数组第一个元素交换,再不断的在剩下的元素中进行重复,最后将数组排序。 复杂度考虑 假设数组的元素为N个,从0~N - 1的任意一个元素i都需要进行一次交换和N - 1 - i 次比较,总共就是N次交换和 \(N^2-1\)
阅读全文

浙公网安备 33010602011771号