数据结构与算法
SJLin96
这个作者很懒,什么都没留下…
展开
-
卡特兰数
一、简介卡特兰数(Catalan number)又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。卡特兰数Cn满足以下递推关系:1、通项公式:2、前几项为:h(0)=1 h(1)=1 h(2)=2 h(3)=5 h(4)=14 h(5)=42…… 二...转载 2018-07-25 18:22:46 · 149 阅读 · 0 评论 -
电梯调度 / 磁盘调度算法
一. FCFS(First Come First Serve)假设当前磁道在某一位置,依次处理服务队列里的每一个磁道,这样做的优点是处理起来比较简单,但缺点是磁头移动的距离和平均移动距离会很大。 这种方法在请求较少的环境下,性能尚可接受,但是在请求较多的情况下,这种算法的性能就会严重下降,甚至恶化。 二. SSTF(Shortest Seek Time First)SSTF,最短寻...原创 2018-09-17 09:32:19 · 9437 阅读 · 0 评论 -
回溯法
一. 简介回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结...原创 2018-09-01 08:25:41 · 132 阅读 · 0 评论 -
尾递归以及优化
参考文章:尾递归与Continuation浅谈尾递归的优化方式(这篇和上面那篇都出自知乎三大编程大佬之一:赵劼)递归与尾递归总结什么是尾递归? 一. 先看一个来自知乎的通俗例子尾递归: function story() { 从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story() // 尾递归,进入下一个函数不再需要上一个函数的环境了,得...转载 2018-08-21 22:31:01 · 230 阅读 · 0 评论 -
字符串相关算法
一. 字符串排序算法1. 低位优先(Least-Signifcant-Digit First,LSD)该算法要求被排序的每个字符串长度都相等。它会把字符串当成数字,从字符串的右边开始向左检查字符(相当于从数字的最低位到高位)。2. 高位优先(MSD)的字符串排序它不要求被排序的字符串等长,而且不一定需要检查所有的输入就能完成排序。该算法将从左开始向右检查字符(就像通常我们比较字符串那...原创 2018-08-28 11:08:02 · 1320 阅读 · 0 评论 -
拓扑排序(AOV网)、关键路径(AOE网)
一. 拓扑排序 - AOV网1. 一些概念DAG(directed acycline graph):有向无环图。 检查一个有向图是否存在环:从有向图上某个顶点v出发遍历,DFS(v)结束之前,出现一条从顶点u到v的回边,u在生成树上是v的子孙,则有向图中必定存在包含顶点v和u的环。 AOV网(Activity On Vertex Network):在一个表示工程的有向图中,用顶点表示活...原创 2018-08-17 21:42:07 · 7316 阅读 · 0 评论 -
广义表
一. 简介广义表是线性表的推广,是一种非线性的数据结构。 广义表中放松对表元素的原子限制,容许它们具有其自身结构。 广义表被广泛的应用于人工智能等领域的表处理语言LISP语言中。在LISP语言中,广义表是一种最基本的数据结构,就连LISP 语言的程序也表示为一系列的广义表。 广义表是n(n≥0)个数据元素a1,a2,…,ai,…,an 的有序序列,一般记作: ls=(a1,a2,…...转载 2018-08-18 18:54:10 · 2652 阅读 · 0 评论 -
哈夫曼树带权路径长度
一. 长什么样?左边是普通树,右边是哈夫曼树图a: WPL=5*2+7*2+2*2+13*2=54图b: WPL=5*3+2*3+7*2+13*1=48可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。 二. 怎么生成和计算?1. 总结①先对权值从小到大排序。②选两个最小的加起来成为一个新结点,而这两个最小的值是新结点的左右子结...原创 2018-08-13 16:24:51 · 60530 阅读 · 7 评论 -
图 相关问题和算法
一. 一些定义和术语顶点(vertex):图中的数据元素。 弧(arc):<v,w>表示从顶点v到顶点w的一条弧,v为弧尾(tail)或初始点,w为弧头(head)或终端结点。此时图为有向图。 边(edge):(v,w)表示顶点v和w之间的一条边,边是没有方向的。此时的图为无向图。 无向图e的取值范围是:0到 1/2*n(n-1);有向图是:0到n(n-1)。(其中e是边或弧...原创 2018-08-13 16:15:27 · 756 阅读 · 0 评论 -
排序算法
一. 冒泡排序它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到...原创 2018-08-02 23:05:10 · 367 阅读 · 0 评论 -
哈希表查找 的 平均长度
将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组。散列函数为: H(key) = (key*3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。(1) 请画出所构造的散列表;(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。一、查找成功平均长度通过公式计算出存放的位置,如果该位置已经...原创 2018-08-11 22:24:55 · 18439 阅读 · 1 评论 -
线性表、栈、队列 相关问题
一. 简介线性结构: ①存在唯一一个被称为“第一个”的元素;也存在唯一一个被称为“最后一个”的元素。 ②除第一个外,每一个元素只有一个前驱;除了最后一个外,每一个元素只有一个后驱。 线性表的顺序表示:用一组地址连续的存储单元一次存储线性表的数据元素。 如果满足LOC(ai)=LOC(a1)+(i-1)*l (l是每个元素的存储长度),则说明这个线性表是顺序表示的。 顺序的线性表插入或...原创 2018-08-05 20:58:37 · 209 阅读 · 0 评论 -
树 相关问题和算法
一. 二叉树1. 性质①在二叉树第n层上,至多有2^(n-1)个结点。②深度为k的二叉树,至多有(2^k)-1个结点。③对任何一棵二叉树,如果其终端结点数为n0,度为2的结点数为n2。有n0=n2+12. 二叉树遍历①先序遍历(根左右)先访问根结点(打印)→先序遍历左子树→先序遍历右子树上图先序遍历结果:1 2 4 6 7 8 3 5②中序遍历(左根右)...原创 2018-07-31 22:37:19 · 291 阅读 · 0 评论 -
查找算法
一. 顺序查找顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。#include <iostream>#include <cstdlib>using namespace std;int order_find(int *arr, i...原创 2018-08-05 15:39:58 · 218 阅读 · 0 评论 -
动态规划问题
一. 从一个例子入门题目:在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字为 0~99。(此题目来源于北大POJ) 输入格式: 5 //表示三角形的行数 接下来输入三角形 7 3 8...原创 2018-07-31 14:36:12 · 449 阅读 · 0 评论 -
树、森林和二叉树的转换
一. 树转二叉树步骤: ①加线:在所有兄弟结点之间加一条连线。②去线:树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。③层次调整:以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子) 例子:①原始树②加线③去线④调整 二. 森林转换为二叉树步骤: ①把每...原创 2018-09-12 23:00:01 · 10623 阅读 · 0 评论