数据结构与算法
ludan_xia
我很菜 但是我会 一步步地 努力!
展开
-
静态链表与动态两边的优缺点
静态链表优点1.在插入和删除操作肘,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点缺点没有解决连续存储分配(数组)带来的表长难以确定的问题。失去了顺序存储结构随机存取的特性。动态链表的优缺点优点插入删除速度快 内存利用率高,不会浪费内存 大小没有固定,拓展很灵活。缺点不能随机查找,必须从第一个开始遍历,查找效率低数组的优缺点优点:数组定义简单,而且访问很方便缺点:插入删除都不方便数组中..原创 2020-05-09 20:43:35 · 2672 阅读 · 0 评论 -
分治法,动态规划及贪心算法区别
分治法,动态规划法,贪心算法这三者之间有类似之处,比如都需要将问题划分为一个个子问题,然后通过解决这些子问题来解决最终问题。但其实这三者之间的区别还是很大的。1.分治法分治法(Divide-and-Conquer) : 将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。分治模式在每一层递归上都有三个步骤:...原创 2020-05-07 16:09:23 · 1275 阅读 · 0 评论 -
堆的定义以及实现
https://www.cnblogs.com/hello-shf/p/11393655.html原创 2020-05-06 11:51:16 · 220 阅读 · 0 评论 -
计算性复杂理论初步(二):NP完全问题的基本概念
一、NP完全问题的定义(一)在定义P问题的基础上,我们进一步定义NP问题非确定行算法在多项式时间内可解,也可以理解为多项式内可验证准确的定义:定义一个NP问题,如果该问题的解在多项式时间内可验证。这里的可验证:1、多项式时间内可以推测该问题的一个解2、多项式时间检查这个解是不是该问题的一个解(二)NP问题举例最大团问题就是NP问题二、NP难问题与NP完全...原创 2020-04-27 13:22:54 · 638 阅读 · 0 评论 -
计算复杂性理论初步(一)多项式时间归约
一、归约的意义求解一个算法问题的时候,我们往往可以直观地感受到有些问题是比较难的,有些问题是比较简单的,但是我们并不能因为没有设计出一个比较高效的算法,就说它是一个难问题,所以问题的难易是相对的,我们需要一个科学的手段来界定问题的难易我们可以用问题之间的归约,来界定两个问题之间相对难易程度的基本手段二、优化问题与判定问题很多经典的难问题都是优化问题,而一个优化问题往往可以...原创 2020-04-27 12:48:22 · 2868 阅读 · 3 评论 -
数组和链表插入效率比较
数组和链表将对象插入指定位置时,大致可以分为两个步骤:1、找到要插入元素的位置2、进行插入操作可以得到等式:找到位置所需时间 + 插入所需时间 = 将对象插入指定位置所需总时间由此可以先假设几个值:找到插入元素的位置涉及的变量:要插入的位置为z获取一个对象引用所需时间m进行插入操作涉...转载 2020-04-23 16:07:56 · 1391 阅读 · 1 评论 -
如何获得链表的中间节点 & 链表判环 (快慢指针)
一、如何获得链表的中间节点普通方法:1、先通过遍历得到链表的长度2、然后再通过长度遍历得到链表的中间节点3、当然有一些链表通过一个特殊的头节点记录链表的长度的情况,可能要简单一些。总公需要遍历的节点个数 1.5n快慢指针法:1、使用两个指针进行遍历,然后快指针每次步进2,慢指针每次步进12、当快指针到达链表尾部的时候吗,慢指针指向的就是链表的节...原创 2020-04-23 09:52:49 · 262 阅读 · 0 评论 -
冒泡排序 & 选择排序 &
一、冒泡排序(稳定的排序)冒泡:以选出最大为例,如果a[i]>a[i+1],那么交换思路:每一轮冒泡将会在剩下的(n-i)个元素中产生一个最大或者最少的值,第一轮i等于0,第二轮i等于1…而总共需要多少轮冒泡?需要n-1次。每一轮的冒泡需要比较(n-i-1)次即可确定一个极值,所以(n-i-1)就是一轮冒泡要比较的次数所以时间复杂度为 O(n^2)void B...原创 2020-04-22 21:24:54 · 235 阅读 · 0 评论 -
索引是什么?它的底层是怎么实现的?
一、索引是什么?索引是单独的,物理的对数据库表中一列或多列的值进行排序的一种存储结构,让程序能够快速找到所需内容。索引是一种数据结构(平衡树非二叉),即B树,B+树,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件。二、它的底层是怎么实现的?(一)B-树注意:之前有看到有很多文章把B树和B-tree理解成了两种不同类别的树,其实这两个...原创 2020-04-21 16:08:39 · 2109 阅读 · 0 评论 -
哈希表的冲突处理
1、链地址法(拉链法)指把所有的冲突关键字存储在一个线性链表中,这个链表由其散列地址唯一标识。。首先来看使用拉链法解决哈希冲突的几个操作:①插入操作:在发生哈希冲突的时候,我们输入域的关键字去映射到位桶(实际上是实现位桶的这个数据结构,链表或者红黑树)中去的时候,我们先检查带插入元素x是否出现在表中,很明显,这个查找所用的次数不会超过装载因子(n/m:n为输入域的关键字个数,m为位桶的...原创 2020-04-21 00:09:50 · 499 阅读 · 0 评论 -
为什么选择快排而不选择堆排序
第一、堆排序访问数据的方式没有快速排序友好。对于快速排序来说,数据是顺序访问的。而对于堆排序来说,数据是跳着访问的。比如,堆排序中,最重要的一个操作就是数据的堆化。比如下面这个例子,对堆顶进行堆化,会依次访问数组下标是1,2,4,8的元素,而不像快速排序那样,局部顺序访问,所以,这样对CPU缓存是不友好的。第二、对于同样的数据,在排序过程中,堆排序算法的数据交换次数要多于快速排序。我...原创 2020-04-20 22:26:03 · 1947 阅读 · 0 评论