![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法分析
文章平均质量分 78
不秃头的码农
大数据应用,数据结构与算法分析
展开
-
算法笔记1————求一维数组的主元素
【考研408真题】【leetcode】求一维数组的主元素主元素是数组内出现次数超过一半的数字,如果有返回该数,否则返回-1,比如【4,4,4,2,3,1,4】返回4,【1,2,1,3,1,3】返回-1解题思路很多:(1)时间复杂度达到O(n^2):利用新数组存值,再遍历计数(2)时间复杂度达到O(nlogn): 先排序(比如快排时间复杂度是O(nlogn)),再判断是否有主元素,事实上如果...原创 2019-03-30 19:24:59 · 1237 阅读 · 1 评论 -
迪杰斯特拉算法(图示+C语言实现)
迪杰斯特拉是单源最短路算法(即只能求一点,到其他任一点的最短路径,但可以加循环得到任意两点间的最短路径),无法处理带负权变的图算法思路图示初始化两个集合S={A}(只包含源点,表示已经确定最短路径的节点,一旦S中包含所有元素那么算法终止)U={B,C,D,E,F,G}初始化,所有距离初始化为无穷大选定点A,更新选定A-B路径(即S集合为{A,B}),考察B的所有邻接点为什么选定...原创 2019-08-16 22:52:06 · 8667 阅读 · 1 评论 -
数据结构与算法笔记-----B树,B+树及其应用
学习路径:B树的特点一个M阶的b树具有如下几个特征:(1)定义任意非叶子结点最多只有M个儿子,且M>2;(2)根结点的儿子数为[2, M];(3)除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整;(4)非叶子结点的关键字个数=儿子数-1;(5)所有叶子结点位于同一层,且不带信息(实际上为NULL)(6)k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足...原创 2019-08-11 16:53:06 · 324 阅读 · 0 评论 -
数据结构笔记----哈希表及其在JAVA集合中的应用
哈希表(散列表)的基本概念在线性表和数表中,记录在表中的位置和记录的关键字之间存在不确定关系,他们的查找基于“比较”而哈希表是根据关键字直接访问的数据结构它是一种高效的数据结构,其高效主要体现在把数据的存储和查找时间大大降低,几乎可以看成是常数时间,而代价是消耗比较多的内存,然而在硬件技术越来越发达的今天,用空间换时间的做法在某种意义上是值得的。另外,编码比较容易也是它的特点之一。散列函数...原创 2019-08-14 21:50:51 · 222 阅读 · 0 评论 -
数据结构与算法笔记----广度优先搜索(BFS图示+C语言实现)
广度优先搜索定义及其性质BFS,其英文全称是Breadth First Search。广度优先搜索算法具有完全性。这意指无论图形的种类如何,只要目标存在,则BFS一定会找到。然而,若目标不存在,且图为无限大,则BFS将不收敛(不会结束)。广度优先搜索的应用(1)寻找连接元件(2)寻找非加权图的两点最短路径(3)检测二分图算法思想将A移出队列将相邻节点依次加入队列(1)将B...原创 2019-08-07 21:19:41 · 11155 阅读 · 3 评论 -
数据结构与算法----深度优先搜索(DFS图示+C语言实现)
深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search一,应用(1)拓扑排序(比如,在大学里必须满足一些先决条件才能选的课程)(2)走迷宫和八皇后问题(结合回溯算法)(3)部分和,给出的n个数字中找到m和数字加起来等于sum(4)检验连通性的问题(求联通分量)(5)求无权最短路二,算法思想DFS的操作步骤如下:1、把起始...原创 2019-08-06 20:10:34 · 5578 阅读 · 1 评论 -
数据结构与算法笔记-----动态规划简述(以Coin change为例图示+C语言实现)
什么是动态规划动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶...原创 2019-08-08 15:13:39 · 353 阅读 · 0 评论 -
数据结构算法笔记---图解快排(QuickSort)
(1)快排的思想实际上每一个step 都是将序列分别为两部分,前半部分小于它,后半部分大于它(图中以5为例,我们考虑增序)然后对前半部分和后半部分进行同样的操作(递归)(注:5是哨兵变量,哨兵变量可以任选,但是哨兵变量可能是最大或者最小的,如果这样,算法的效率会很低,所以选择正确哨兵很重要)下面是详细的步骤:(1)以5作为哨兵变量,令i指向第二个下标,j指向最后一个下标(2)i向后...原创 2019-08-01 23:36:35 · 439 阅读 · 0 评论 -
数据结构与算法笔记---并查集
并查集是一个树形的结构,用于处理不相交集联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作Find:确定元素属于哪一个子集。方法就是不断向上查找找到它的根节点,它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。用数组能够更好的理解并查集:例如上面这三棵树:(1)P【15】=15,表示15就是15的根(2)P...原创 2019-08-05 22:59:26 · 138 阅读 · 0 评论 -
数据结构与算法----二叉搜索树(Binary Search Tree)
一,性质(1)二分搜索树是一颗二叉树(但不一定是完全二叉树),满足二叉树的所有定义;(2)二分搜索树每个节点的左子树的值都小于该节点的值,每个节点右子树的值都大于该节点的值。(3)以左右孩子为根的子树仍为二分搜索树二,意义(1)在查找元素时,我们于根节点进行对比后,就能每次近乎一半的去除掉查找范围,这就大大的加快了我们的查询速度,插入元素时也是一样。(2)用来实现字典数据结构(查找表...原创 2019-08-05 22:07:56 · 164 阅读 · 0 评论 -
数据结构与算法笔记----基数排序和计数排序,桶排序
(1)计数排序算法思想伪计数排序(被坑了,乍一看有点计数的思想,但是时间复杂度O(N^2),空间复杂度O(n),真的侮辱智商) 这是某博主的提供的思路【 对每一个输人元素x,确定小于x 的元素个数。 利用这一信息,就 可以直接把x放到它在输出数组中的位置上了。 例如,如果有17个元素小于x,则x就应该在第18个输出位置上。 当有几个元素相同时,这一方案要略做修改。 因为不能把它们放在同一...原创 2019-08-04 18:10:11 · 146 阅读 · 0 评论 -
数据结构与算法笔记----二叉堆的定义及其基本操作,堆排序(HeapSort)
什么是堆①作为一种数据结构,是完全二叉树在数据结构课本中学习了两种:大根堆,小根堆大根堆,双亲>孩子(可以用作实现优先队列,优先级高的先出)小根堆,双亲<孩子②堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。③堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。④堆是指程序运行时申请...原创 2019-08-04 08:23:03 · 263 阅读 · 0 评论 -
数据结构与算法笔记----图解归并排序(MergeSort)
(1)算法思路基本操作是:合并两个排序好的表,将输出放在辅助数组里面一次归并的过程,和合并两个有序链表几乎是一样的:初始状态:(1)1<2,那么将A所指元素放入辅助数组,再令A++,C++;(2)13>2,那么将B所指元素放入辅助数组,再令B++,C++;![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802153029830...原创 2019-08-02 17:00:20 · 329 阅读 · 0 评论 -
数据结构笔记-----对递归(recursion)的学习
递归的含义一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。(1) 基准:存在不需递归就能解除的情形(2) 不断推进:朝着基准(解)不断推进(3)设计法则:所有递归调用...原创 2019-07-20 20:18:14 · 175 阅读 · 0 评论 -
数据结构笔记----图解插入直接排序算法及其改进形式
insertsort算法思想:将待排序的记录按大小插入已经排序好的子序列中算法分析:时间复杂度O(n^2)空间复杂度O(1)稳定的算法适用于顺序存储和链式存储的线性表特点:可以提前终止循环,在数据基本有序时效率很高应用:在复杂排序中作为一个子过程 来优化void InsertSort(elemtype *a,int n){//逆序 for(int i=1;i<n;i++)...原创 2019-07-29 15:19:05 · 210 阅读 · 0 评论 -
算法笔记4------获取出现次数大于1的字串(JAVA)
题目:获取出现次数大于1的字串,以字典序(字串 出现次数)输出(1)获取所有字串:这一步比较简单for(int i=0;i<str.length();i++) { for(int j=i+1;j<=str.length();j++) { substr = str.substring(i,j);//得到所有子串 }}(2)如何存这些字串?想到了JA...原创 2019-05-09 21:09:22 · 825 阅读 · 0 评论 -
算法笔记3-----------Java大数类(这也能叫算法?菜鸡的我只能如此)
来自牛客网,求大数问题偷懒的做法(BigDecimal,BigInteger)牛客网能AC,但是百炼OJ好像不行,以后有能力用C的数组来做一次吧题目:求N!import java.math.BigDecimal;import java.util.Scanner;public class Main { public static void main(String[] args) {...原创 2019-04-30 19:24:35 · 103 阅读 · 0 评论 -
数据结构与算法笔记----BF算法与KMP算法(图解+C语言实现+代码分析)
BF算法算法思想:比较简单,定义i,和j分别指向主串和字串的头部),依次向后比较,若比较失败,主串和字串都需要回溯(i=比较轮数+1的位置,j回到0位置)元素相同,故i,j均向后移一位元素不同,i退回第二个位置。j变成0元素还是不同,i退到第三个位置结束#include<stdio.h>#include<string.h>bool BF(cha...原创 2019-08-13 09:30:19 · 1476 阅读 · 0 评论