C++
MiuRui
材料小硕努力学习计算机技能点
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第四章 树-中
1、二叉搜索树查找(递归,效率低)Position Find(Element X,BinTree BST){ if(!BST) return NULL; if(X>BST->Data) return Find(X,BST->Right); Else if(X<BST->Data) return Find(X,BST->Left); else return BST;}提升效率可改为迭代函数Position Find(Element X,Bin原创 2020-08-18 16:36:43 · 162 阅读 · 0 评论 -
第三章 树-上
1、查找静态查找:集合中记录是固定的动态查找,除查找,还可能发生插入和删除,集合中记录是动态变化的静态查找:方法1:顺序查找typedef struct LNode *List;struct LNode{//创建一个查找结点 ElementType Element[MAXSIZE]; int Length;};int search(List Tbl,ElementType K){ int i; Tbl->Element[0]=K;/*建立哨兵,不用每次判断是否搜索越界*/原创 2020-08-15 14:11:27 · 166 阅读 · 0 评论 -
数据结构第二章
1、线性表线性表Linear List:由同类型数据元素构成有序序列的线性结构。数据对象集:线性表是n个元素构成的有序序列操作集:线性表L属于List,元素为基本元素类型1、List MakeEmpty():初始化一个空线性表2、Element Type FindKth(int K,List L):根据位序K返回相应元素3、int Find(ElementType X,List L):在线性表L中查找X的第一次出现位置4、void Insert(ElementType X,int i,List原创 2020-08-13 13:51:05 · 298 阅读 · 0 评论 -
第一讲 数据结构
1.1数据结构如下是常见的三种定义:1、数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。2、数据结构是ADT的物理实现。3、数据结构是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。陈越:数据结构是:数据对象在计算机中的组织方式:逻辑结构和物理存储结构数据对象必定与一系列加在其上的操作相关联完成这些操作所用的方法就是算法ADT:数据类型:数据对象集,数据集合相关联的操作集抽象:描述数原创 2020-07-11 18:00:34 · 183 阅读 · 0 评论 -
2.3有序向量
1、有序性及其甄别有序/无序序列中,任意/总有一对相邻元素顺序/逆序相邻逆序对的数目,可以度量向量的逆序程度。template <typename T> int Vector<T>::disordered() const{ int n=0; for(int i=1;i<_size;i++){ n+=(_elem[i-1]>_elem[i]); } return n;}2、唯一化:低效算法template <typename T>i原创 2020-07-09 19:51:31 · 415 阅读 · 0 评论 -
2.2向量操作
向量模板:Template<typename T> Vector{...}可以说定义了一系列向量:Vector<int/float/char> myVector;1、元素访问通过V.get®、V.put(r,e)可以读写向量,但不如数组元素A[i]的访问方式的便捷性。可以通过如下方法实现:template<typename T>T&Vector<T>::operator[](Rank r) const{return _elem r;}原创 2020-07-06 17:12:15 · 503 阅读 · 0 评论 -
2.1向量vector
1、接口与实现2、Abstract Data Type vs. Data Structure抽象数据结构=数据模型+定义在该模型上的一组操作数据结构=基于某种特定语言,实现ADT的一整套算法定义与实现复杂度存储方式抽象数据类型抽象定义,一种定义外部的逻辑特性,不考虑时间复杂性操作&语义,不涉及数据存储方式数据结构具体实现,多种实现内部的表示与实现与复杂度密切相关完整算法,考虑数据的具体存储机制3、从数组到向量在c/c++语言中数组中每个元素都原创 2020-07-04 19:17:08 · 279 阅读 · 0 评论 -
1.6动态规划
1、fib():递归int fib(n){return(2>n)?n:fib(n-1)+fib(n-2);}复杂度T(n)=T(n-1)+T(n-2)+1,T(0)=T(1)=1令S(n)=[T(n-1)+1]/2则边界条件S(0)=1=fib(1),S(1)=1=fib(1)易得S(n)=S(n-1)+S(n-2)+1=fib(n+1)可知T(n)=2*fib(n+1)-1=o(fib(n+1))=o(φn)=o(2n)T(n)=o(2n)φ=(1+根号2)/2=1.61803记原创 2020-07-04 12:11:00 · 3321 阅读 · 0 评论 -
1.5迭代与递归
1、数组求和:迭代实现:逐一取出,累加之int SumI(int A[], int n){ int sum=0;//o(1) for(int i=0;i<n;i++){//o(n) sum+=A[i];}//o(1) return sum;}2、数组求和:线性递归sum(int A[], int n){ return (n<1)?0:sum(A,n-1)+A[n-1];}T(n)=o(n)3、数组倒置A[0,n],子区间A[lo,hi]接口:void reve原创 2020-07-03 22:28:58 · 197 阅读 · 0 评论 -
1.4算法分析
1、 算法分析:两个主要任务=正确性(不变形×单调性)+复杂度C++等高等语言的基本指令,均等价于常数条RAM的基本指令;在渐进意义下,二者大体相当。分支转向:goto //算法被隐藏的灵魂迭代循环:for、while等本质上是if+goto调用、递归(自我调用) 本质上也是goto复杂度分析的主要方法:迭代:级数求和递归:递归跟踪+递推方程猜测+验证2、级数算术级数:与末项平方同阶T(n)=1+2+。。。+n=O(n2)幂方级数:比幂次高出一阶T(n)=12+22+。。。+n原创 2020-07-03 17:30:20 · 358 阅读 · 0 评论 -
1.3复杂度分析
1、渐进分析:大O记号通常状况下我们更关心足够大的问题,注重考察成本的增长趋势。渐进分析:问题足够大时,计算成本的增长大O记号(big-O notation):T(n)=O(f(n))存在c>0,当n>>2时T(n)<cf(n)常系数可忽略:O(f(n))=O(cf(n))低次项可忽略:a>b,O(na+nb)=O(na)2、渐进分析:其它记号大Ω记号,n无穷大时,下界函数大θ记号,存在c1>c2>0,当n>>2,有c1f(n)>原创 2020-07-03 11:41:12 · 249 阅读 · 0 评论 -
1.2计算模型
1、算法分析正确性:后续文章会讲计算成本:运行时间+储存空间Ta(P)=用算法a求解某一问题P的实例所需的计算成本通常:规模接近,计算成本也接近,规模扩大,计算成本也上升。特定算法+不同实例:Ta(n)=用算法a求解某一问题规模为n的实例所需的计算成本但是同样问题等规模的不同实例,计算成本不尽相同。完善:T(n)=max{T(P)| |P|=n},规模为n的实例最坏的状况下的计算成本...原创 2020-07-03 10:37:26 · 4263 阅读 · 0 评论 -
PAT甲级考试 1001 A+B Format
Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input file contains one test case. Each case contains a pair of i原创 2020-07-02 21:53:26 · 170 阅读 · 0 评论 -
1.1算法绪论
算法1、计算=信息处理借助某种工具,遵照一定规则,以明确而机械的形式进行。计算模型=计算机=信息处理工具2、算法所谓算法,即特定计算模型下,旨在解决特定问题的指令序列。输入 待处理的信息=问题输出 经处理的信息=答案正确性 的却可以解决指定的问题确定选 任一算法都可以描述为一个由基本操作组成的序列可行性 每一基本操作都可实现,且在常数时间内完成有穷性好算法:正确:符合语法,能够编译、链接能正确处理简单的、大规模的、一般性的、退化的、任意合法的输入。原创 2020-07-02 16:32:11 · 232 阅读 · 0 评论
分享