随笔分类 - 数据结构与算法分析
摘要:深度优先搜索(DFS) 邻接表O(N+E) 邻接矩阵O(N^2) 广度优先搜索(BFS) 邻接表O(N+E) 邻接矩阵O(N^2) 为什么需要两种遍历? 图不连通怎么办? 连通: 路径: 简单路径: 回路: 连通图: 连通分量:无向图的极大连通子图 极大顶点数:再加1哥顶点就不连通了 极大边数:包含
阅读全文
摘要:六度空间理论(Six Degrees of Separation) 认识任何一个人,不超过6个人就可以 什么是“图” 表示“多对多”的关系(线性表和树可以看成图的特殊情况) 包含: 1. 一组顶点V 2. 一组边E $(v,w)\in E$ ,其中$v,w \in V$ $$表示从v指向w的边(单行
阅读全文
摘要:查找问题: 静态查找 和 动态查找 二叉搜索树(Binary Search Tree, BST) 1. 定义 二叉搜索树,又称为二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质: (1)非空左子树的所有键值小于其根结点的键值 (2)非空右子树的所有键值大雨其根结点的
阅读全文
摘要:树 客观世界中许多事物存在层次关系 eg:人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率 查找(Searching):给定某个关键字K,从集合R中找出关键字与K相同的记录 静态查找:集合中记录是固定的 没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的 除查找
阅读全文
摘要:链表是否只对C/C++有意义?Java没有指针? 答:链表是抽象的数据结构。一块存数据,一块存指针。 问题:一个单链表,每k个元素逆序,返回头 PAT是黑盒测试,取巧的方式是将原本链表的数据存在顺序表中,再逆序输出。如果让每k个逆序输出,那么可以使用堆栈,利用堆栈实现逆序输出。 下面真正将链表逆序:
阅读全文
摘要:题意理解 已知两个多项式: (1)$3x^4 5x^2+6x 2$ (2)$5x^{20} 7x^4+3x$ 多项式和: $5x^{20} 4x^4 5x^2+9x 2$ 多项式乘积: $(a+b)(c+d)=ac+ad+bc+bd$ 略 输入样例: 输出样例: 求解思路 1. 多项式表示 //首先
阅读全文
摘要:队列 1. 定义 队列(Queue):具有一定操作约束的线性表 插入和删除操作:只能在一端插入,而在另一段删除 数据插入:入队 数据删除:出队 先来先服务 先进先出:FIFO 2. ADT队列 队列的顺序存储实现 队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量front和一个记录
阅读全文
摘要:什么是堆栈 1. 计算机如何表达式求值 eg: $5+6/2 3 4$ 分析:由运算数和运算符号构成;不同运算符号优先级不一样 后缀表达式:运算符号位于两个运算数之后 求值策略:从左往右“扫描”,逐个处理运算数和运算符号 启示:顺序存储运算数,并在需要时倒序输出 堆栈的ADT 1. 定义:具有一定操
阅读全文
摘要:一元多项式的表示 1. 一元多项式: $$f(x)=a_0+a_1x+a_2x^2+a_3x^3+...+a_nx^n$$ 2. 运算: 加、减、乘 3. 分析: 关键数据:项数、系数和指数 4. 顺序存储结构直接表示 eg:$f(x)=5x^2+1$,a[]={1,0,0,0,0,5}; 进行运算
阅读全文
摘要:$O(f(n))$: $T(n)=O(f(n))$表示存在常数$C 0$,$n_0 0$,使得当$n n_0$时,总有$T(n)0$,$n_0 0$,使得当$n n_0$时,总有$T(n) =Cf(n)$ $\Theta(f(n))$: $\Theta(f(n))$表示同时有$T(n)=O(f(n)
阅读全文
摘要:空间复杂度$S(n)$ 时间复杂度$T(n)$ 与处理的规模相关,所以是$n$的函数。 在分析一般算法的效率时,我们经常关注下面两种复杂度: 1. 最坏情况复杂度$T_{worst}(n)$ (更容易,更常用) 2. 平均复杂度$T_{avg}(n)$
阅读全文
摘要:定义 例:选择排序算法 伪码描述: 抽象的伪码描述。List可以是个链表。Swap可以函数写,也可以宏来写。
阅读全文
摘要:数据结构 数据结构是数据对象在计算机中的组织方式。 数据对象必定与一系列加在其上的操作相关联。 完成这些操作所用的方法,就是算法。 逻辑结构 线性结构 非线性结构:树状结构、图结构 存储结构 抽象数据类型ADT 数据类型 数据对象集 数据集合相关联的操作集 抽象 描述数据类型的方法不依赖于具体实现
阅读全文
摘要:问题:写程序计算给定多项式在给定点x处的值。 最简单无脑的写法。直接带入$f(x)=a_0+a_1x+a_2x^2+...+a_nx^n$,循环,一项一项地加即可。 使用clock() 常数CLK_TCK:机器始终每秒所走的时钟打点数 测试程序: 运行结果差一个数量级。解决问题方法的效率和算法的巧妙
阅读全文
摘要:问题:打印从1~N的数。 循环写法: 当N很大的时候,用递归写法可能直接就爆掉了。递归写法更符合人类的思维方式,代码也更容易懂。但不适合计算机来处理。
阅读全文