数据结构与算法
文章平均质量分 82
数据结构与算法
Hack Rabbit
云计算&容器领域博主
展开
-
[二分查找] 二:二分查找的经典例题
1.何时应该会使用二分查找当题目中出现有序数组时当时间复杂度要求为log(n)时搜索范围可以一次缩小一半时2. 经典例题1给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:原创 2022-01-22 16:13:10 · 2814 阅读 · 0 评论 -
[二分查找] 一:子区间界限应当如何确定
普通的二分查找先引入一个最简单的二分查找吧int binarySearch(int* nums, int numsSize, int target){ int left = 0, right = numsSize-1; while(left <= right){ int mid = left + (right - left)/2; if(nums[mid] == target){ return mid; } else if(nums[mid] > target){原创 2021-03-12 13:31:26 · 968 阅读 · 0 评论 -
B树、B+树其实很简单,看不懂你找我
文章目录原创 2020-05-07 15:05:11 · 1868 阅读 · 0 评论 -
你必须会的启发式搜索算法--A*算法
文章目录一.算法原理1.评估函数2.待测点与已测点的存储二.算法实现三.实验测试测试一测试二一.算法原理A* 算法,就是解决在一个平面 grid地图中寻找起点到终点的最短路径问题的算法,类似于Dijkstra算法和BFS算法一样,属于广度优先搜索。实际上它还是一个启发式搜索算法,什么叫启发式搜索算法?不同于BFS和DFS在子节点选择上其实是盲目的,启发式搜索就是利用评估函数在平面中对所有的待搜...原创 2020-04-17 16:01:30 · 1889 阅读 · 0 评论 -
红黑树,看不懂你找我
文章目录一:什么是红黑树二:关于红黑树的一般操作1.查找操作2. 插入操作2.1 新节点:我是红色的,我爹是红色的,我叔叔是黑色的2.2 新节点:我是红色的,我爹是红色的,我叔叔也是红色的3.删除操作3.1替代点是红色的3.2替代点是黑色的3.2.1 替代点的兄弟节点是红色3.2.2替代点的兄弟节点是黑色3.2.2.1 当兄弟节点的两个儿子也都是黑色3.2.2.2 当兄弟节点的左儿子是红色的,右儿...原创 2020-03-26 21:27:20 · 1534 阅读 · 4 评论 -
你了解欧拉回路吗?(附Java实现代码)
文章目录一:什么是欧拉回路?二: 无向图中欧拉回路存在的条件三:如何得到起点终点重合的欧拉回路四:Java实现一:什么是欧拉回路?不知道你有没有玩过这样一种叫“一笔画”,从某一点开始画一个图形或图案,期间笔不能从纸上离开而且每条边只能画一次。下面有三个例子,你可以先试一试看看能不能“一笔画”第一个图其实是根本画不出来的,第二个图可以画出,但是不存在起点和终点为同一点的情况,第三个图可......原创 2020-03-21 02:04:22 · 1570 阅读 · 0 评论 -
经典常用算法/常用算法思维---附伪代码以及实现
AlgorithmsSorting AlgorithmsBucket SortBUCKET_SORT(A)n = A.lengthlet B[0...n-1] be a new arrayfor i = 0 to n-1 make B[i] an empty listfor i = 1 to n insert A[i] to B[A[i]]for i = 0 to n sor...原创 2020-04-18 18:02:32 · 3050 阅读 · 3 评论 -
分治法实现最近点对问题——C语言可视化
1. 分治法步骤1.按x对点对数组进行从小到大排序2.找出x中间值,按中间值划分数组为左右两部分3.不断细分,找出左右两部分的最近点对4.重复步骤1.2.3,得到最终左右两部分的最近点对的距离d5.找出 |X - Xmid| < d ,部分的点对,此部分左边的点对集合我们设为p1,右边设为p2,对p1,p2中的点按y的大小从小到大排序6.对P1中所有点p,对排好序的点列作一次扫描...原创 2019-03-23 11:27:03 · 5021 阅读 · 1 评论 -
算法实验--主函数只有五行的Floyed的算法以及最短路径输出
Floyed算法原理:Floyed-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。点 i 到点 j 的距离 :distance(i,j)点i 到点 k 的距离加上点 k 到点 j 的距离:distance(i,k) + distance(k,j)如果distance(i,j) < distance(i,k)...原创 2019-04-01 00:06:29 · 427 阅读 · 0 评论 -
你必须会的--Dijkstra算法--单源最短路径问题
Dijkstra以及路径输出算法原理Dijkstra算法是利用广度优先搜索思想(BFS)的一种单源最短路径算法,相对于简单粗暴时间复杂度为O(n^3)的Floyed算法,(详情见我另一篇博客 只有五行的Floyed算法及全路径输出),Dijkstra算法的时间复杂度则有好的多,为O(n^2)。该算法以起点为中心,将相邻边加入到优先队列中,每次取队列中的最短边,利用伸缩操作(relaxati...原创 2019-04-01 11:35:45 · 1254 阅读 · 0 评论 -
你必须会的DFS的递归实现与堆栈实现
DFS算法原理相比于BFS利用队列实现中心扩散式搜索,DFS就是利用堆栈的思想,利用回溯算法,直观上看是一条路走到黑,如果找到南墙,便回到上个路口,继续一条路走到黑…如此往复,直到到达目标。实现方法首先将根节点压入堆栈中。从堆栈中pop一个节点,并检验它是否为目标。如果找到目标,则结束搜索并回传结果。否则将它所有尚未检验过的直接子节点加入堆栈中。若堆栈为空,表示整张图都检查过了...原创 2019-04-07 23:58:45 · 2987 阅读 · 0 评论 -
算法分析之-渐进记号
渐进记号渐进记号分为:Θ()、Ω()、ω()、O()、o()Θ记号f(n) = Θ(g(n))存在正常数c1,c2和n0, 使得对所有的n>=n0, 都有0<= c1 * g(n) <= f(n) <= c2 * g(n);f(n)与g(n)在数量级上相等我们试着证明:第一步,我们必须确定有:第二步,我们将两边除以n^2C2>=1/2可以使...原创 2019-04-15 10:56:41 · 921 阅读 · 0 评论 -
算法分析之-主方法分析递归式
主方法在算法分析中,我们主要使用代入法,递归树法,和主方法来分析递归式而主方法为如下形式的递归式提供了一套“菜谱”式解法:(a表示子问题的规模,b表示子问题的大小)1.若对某个常数 ε>0 有那么2.若则3.若对某个常数 ε>0 有且对于某个常数c<1和所有足够大的n有则...原创 2019-04-15 11:29:40 · 1946 阅读 · 0 评论