| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 预推免冲刺之数据结构(一) -> 正文阅读 |
|
[数据结构与算法]预推免冲刺之数据结构(一) |
一、什么是数据结构1、数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 2、结构包括逻辑结构和物理结构
二、复杂度1、时间复杂度基本操作执行次数:T(n) 语句频度或时间频度:一个算法中的语句执行次数,记为T(n)。 渐进时间复杂度:O(f(n)) 若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。 O的含义是T(n)的数量级 T(n)=O(f(n))——存在两个常量C和N,当n≥N时,有T(n)≤C*f(n) 【例】T(n)=5logn T(n)=O(logn) 2、空间复杂度空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。 三、查找方法1、静态查找(1)顺序查找——O(n)(2)折半查找/二分查找——O( l o g 2 n log_2n log2?n??)要求查找表为顺序存储结构并且有序 2、动态查找(1)二叉排序树BST——O( l o g 2 n log_2n log2?n)~O(n)二叉排序树为一颗二叉树,或者为空,或者满足如下条件:
中序遍历二叉排序树便可得到一个有序序列 (2)平衡二叉树AVL——O( l o g 2 n log_2n log2?n)它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 3、哈希表——O(1)
哈希函数的构造方法(1)除留余数法
(2)随机法
(3)平方取中法
(4)折叠法
移位法 123+603+247+112+020 个位:3+3+7+2+0=15%10=5 十位:2+0+4+1+2+1(低位进位)=10%10=0 百位:1+6+2+1+0+1(低位进位)=11%10=1 折叠法 123+306+247+211+020 个位:3+6+7+1+0=17%10=7 十位:2+0+4+1+2+1(低位进位)=10%10=0 百位:1+3+2+2+0+1(低位进位)=9%10=9 (5)直接定址法
(6)数字分析法
哈希冲突解决方法(1)开放定址法找hash表剩下空余的空间,找到空余的空间然后插入。 (2)链地址法链地址法的原理时如果遇到冲突,他就会在原地址新建一个空间,然后以链表结点的形式插入到该空间 四、链表1、头指针和头结点的区别头指针:是指向第一个节点存储位置的指针,具有标识作用,头指针是链表的必要元素,无论链表是否为空,头指针都存在。 头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除的操作,头结点不是链表的必须元素,可有可无,头结点的数据域也可以不存储任何信息。 2、数组和链表的区别?从逻辑结构来看:数组的存储长度是固定的,它不能适应数据动态增减的情况。链表能够动态分配存储空间以适应数据动态增减的情况,并且易于进行插入和删除操作。 从访问方式来看:数组在内存中是一片连续的存储空间,可以通过数组下标对数组进行随机访问,访问效率较高。链表是链式存储结构,存储空间不是必须连续的,可以是任意的,访问必须从前往后依次进行,访问效率较数组来说比较低。 如果从第i个位置插入多个元素,对于数组来说每一次插入都需要往后移动元素,每一次的时间复杂度都是O(n),而单链表来说只需要在第一次寻找i的位置时时间复杂度为O(n),其余的插入和删除操作时间复杂度均为O(1),提高了插入和删除的效率。 3、链表的分类
五、队列1、定义队列是允许在一端进行插入另一端进行删除的线性表,对于进入队列的元素按“先进先出”的规则处理,在表头进行删除在表尾进行插入。 2、分类(1)循环队列
(2)双端队列限定插入和删除操作都可以在表的两端进行的线性表 六、栈1、定义栈是只能在表尾进行插入和删除操作的线性表,后进先出 2、两栈共享技术两个栈共享一段存储空间S[M] 将两个栈的栈底分别放在存储空间的两端,分别是0,M-1 3、栈的应用(1)括号匹配(2)数制转换(3)表达式求值将表达式转换为后缀表达式 顺序扫描表达式,如果当前字符是字母(优先级为0的符号),则直接输出;如果当前字符为运算符或者括号(优先级不为0的符号),则判断:
七、串1、简单匹配算法——O(nm)首先将原字符串和子串左端对齐,逐一比较;如果第一个字符不能匹配,则子串向后移动一位继续比较;如果第一个字符匹配,则继续比较后续字符,直至全部匹配。 2、KMP匹配算法——O(n+m)八、树1、基本术语
2、树的存储结构(1)双亲表示法(2)孩子链表表示法(3)孩子兄弟表示? 又称为二叉链表表示法,即以二叉链表作为树的存储结构。链表中每个结点设有两个链域,与二叉树的二叉链表表示法所不同的是,这两个链域分别指向该结点的第一个孩子结点和下一个兄弟(右兄弟),即左孩子右兄弟。 3、二叉树
(1)遍历二叉树
(2)完全二叉树
(3)满二叉树一棵深度为k 且有 2 k 2^k 2k -1个结点的二叉树。特点:每层都“充满”了结点。 (4)线索二叉树将某结点的空指针域指向该结点的前驱后继,定义规则如下:
这种指向前驱和后继的指针称为线索。将一棵普通二叉树以某种次序遍历,并添加线索的过程称为线索化。
(5)哈夫曼树
W P L = 7 ? 1 + 5 ? 2 + 2 ? 3 + 4 ? 3 = 35 WPL=7*1+5*2+2*3+4*3=35 WPL=7?1+5?2+2?3+4?3=35 构造哈夫曼树:
4、森林(1)森林转二叉树森林直接变兄弟,再转为二叉树 (2)二叉树转森林把最右边的子树变为森林,其余右子树变为兄弟 九、图1、存储结构
2、遍历BFS、DFS 3、最小生成树(1)判断连通从任一点开始进行一次BFS或者DFS,如果能遍历所有点,则连通 (2)最小生成树的MST性质假设N=(V,{E})是?个连通?,U是顶点集V的?个?空?集。若(u,v)是?条具有最?权 (3)Prim算法
(4)Kruskal算法4、最短路径问题(1)单源起点的最短路径Dijkstra(2)任意两点最短路径Floyd5、拓扑排序(1)AOV网在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网 (2)拓扑排序从AOV网中选择一个入度为0的顶点输出,然后删去此顶点及以它尾的弧,重复步骤直至输出图中全部顶点。 十、排序
1、稳定性? 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 2、冒泡排序基本思想:反复?较两两相邻元素,若不符合顺序要求,则交换相邻元素,直?有序 3、选择排序将待排序序列看作由已排序部分和未排序部分组成,初始时,?排序部分为空
4、插入排序
5、希尔排序6、堆排序设有一个任意序列,k1,k2,…,kn,当满足下面特点时称之为堆:让此序列排列成完全二叉树,该树具有以下特点,该树中任意节点均大于或小于其左右孩子,此树的根节点为最大值或者最小值。 7、归并排序把两个或者两个以上的有序表合并成一个新的有序表 8、快速排序
十一、贪心算法和动态规划以及分治法的区别1、贪心算法做出在当前看来是最好的结果,它不从整体上加以考虑,也就是局部最优解。贪心算法从上往下,从顶部一步一步最优,得到最后的结果,它不能保证全局最优解,与贪心策略的选择有关。 2、动态规划动态规划常常适用于有重叠子问题和最优子结构性质的问题 把问题分解成子问题,这些子问题可能有重复,可以记录下前面子问题的结果防止重复计算。动态规划解决子问题,前一个子问题的解对后一个子问题产生一定的影响。在求解子问题的过程中保留哪些有可能得到最优的局部解,丢弃其他局部解,直到解决最后一个问题时也就 是初始问题的解。动态规划是从下到上,一步一步找到全局最优解。 3、分治法将原问题划分成n个规模较小而结构与原问题相似的子问题; 递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 8:16:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |