
c++
hello妈耶儿
职场人
展开
-
c++数据结构及算法
Ω\OmegaΩ表示法与Θ\ThetaΘ表示法大O表示法表示函数的上界。对应于大O表示法,存在下界的定义:定义:若存在正数c和N,对于所有的n>=N,有f(n)>=cg(n),则f(n)=Ω\OmegaΩ(g(n))。上述定义表明,如果有一正数c,对于所有的n,是f不小于cg,则f是g的大Ω\OmegaΩ表示,换句话说,cg(n)是f(n)的下界,f至少以g的速度增长。该定义...原创 2019-07-01 16:12:49 · 266 阅读 · 0 评论 -
c++数据结构与算法
自组织链表:用于提高查找效率。依赖于数据的配置,为此需要重新组织链表中已有的数据。前移法:在找到需要的元素后,把他放到链表的开头。换位法:在找到元素后,只要不在链表的开头,就与其前驱交换位置。计数法:根据元素被访问的位置,对链表进行排序。排序法:根据信息的自身属性,对链表进行排序。前三种方法,新信息储存到链表末尾的新增节点中。最后一种方法放在链表的某个位置,以保持链表的顺序。前三种方...原创 2019-08-28 13:39:10 · 338 阅读 · 0 评论 -
c++数据结构与算法
跳跃式链表链表存在一个严重的缺陷:需要顺序扫描才能找到所需要的元素,如果将链表的内容排序可以加速过程但是也需要顺序查找。而跳跃链表起一个可以进行非顺序查找。在有n个节点的跳跃链表中,对于每个满足1<=k<=lgn和1<=i<=n/2-1的k和i,位于2i的节点指向位于2(i+1)。这意味着第2个节点指向前面距离两个单位的节点。第四个节点指向前面距离第四个单位的节点,以此...原创 2019-08-06 18:25:26 · 161 阅读 · 0 评论 -
c++数据结构与算法
循环链表:在某些情况下会用到循环链表。其中的节点组成了一个环。每个节点都有后继节点。在循环单向链表的实现中,即使对链表的操作需要访问尾节点以及前驱结点头节点,都只用一个tail,但是前面的单向节点需要head tail两个节点。插入尾节点可以在O(1)的时间内完成。代码如下:Void addToTail(int el){If(isEmpty()){Tail=new IntSLLNode(e...原创 2019-08-01 15:25:36 · 137 阅读 · 0 评论 -
c++数据结构与算法
删除:删除操作包括链表删除链表的开头以及返回其中的储存信息的值,这个操作是由成员函数deleteFromHead()实现的。将第一个节点的信息临时储存到本地变量el中,然后重置head这样第2个节点就变成了第一个节点。两种特殊情况:一种试图从空链表删除一个节点。如果试图这样做,程序有可能崩溃。第二种情况是删除节点的链表只有一个节点。在这种情况下,链表就会变成空的,这就要要求tail和head设置为...原创 2019-07-20 16:12:52 · 492 阅读 · 0 评论 -
c++数据结构与算法
双向链表:在单向链表的deleteFromTail中有一个固有的问题,在删除后一个节点访问前一个节点的时候必须遍历所有节点恰好停在tail前面,对于较长的程序需要访问deleteFromTail函数这是加快速度的一个障碍,为了避免这个问题用了双向链表,双向指针,一个指向前驱一个指向后驱节点,代码如下:TemplateClass DLLNode{palic:DLLNode(){Next...原创 2019-07-29 15:37:52 · 173 阅读 · 0 评论 -
c++数据结构与算法
数据结构与算法排序:假定数组是以非递减顺序排序的,那么根据“非递减”的含义得出每个元素均小于或者等于他的后继。一个元素比另一个元素小意味着当元素是数字时,结果显然。当元素是字符串时,我们联想到字典序:如果在字典中某元素是其他形式的数据时,我们就自定义“小于”的含义。只要对“小于”有了清晰的概念,我们就能判定数组是否有序。排序算法:选择排序,插入排序,归并排序,快速排序。排序本身是一个重要的问题,...原创 2019-07-18 17:39:45 · 210 阅读 · 0 评论 -
c++数据结构与算法
最好、平均、和最坏情况确定算法的效率至少区分3种情况,算法需要的步骤最多就是最坏情况,步骤最小就是最好情况,平均情况介于二者之间。情况比较简单的时候。平均复杂度的计算步骤:首先考虑算法的可能输入,确定算法为每个输入执行的步骤数目,将每个输入所需的步骤相加,然后除以输入的个数。然而,这个定义假设每个输入出现的概率都是一样的,实际情况并非如此。平均复杂度的定义:将处理每个输入所执行的步骤数与该输...原创 2019-07-06 12:45:07 · 195 阅读 · 0 评论 -
c++数据结构与算法
算法计算机算法解决计算问题时,能够给出正确的答案,有效的利用资源。正确性:我们通常会精确的定义一个正确的解决方案设计的内容。然而对于某些算法很难判定是否给出了正确答案。不过我们可以接受可能会产生的错误算法,只要这个算法的错误频率在可被控制的范围之内。对于另外一种算法—近似算法,正确性也是一个需要重考量的问题。近似算法适合于优化问题。即根据一些量化测度来寻找最优解的问题。“近似最优”就是近似算法...原创 2019-07-12 18:47:31 · 163 阅读 · 0 评论 -
c++数据库与算法
链表插入上一节在链表的前面添加一个节点有四个步骤。创建一个空节点。空节点就是执行插入的程序时不该为该节点的数据成员赋值该节点的info成员初始化为特定的数据。next成员指向链表的第一个节点的指针,这就是head的当前值。新的节点放在表中的第一个位置。所以把head更新为指向新节点的指针。这四个步骤由上一节中的addToHead()执行。有一种特殊情况,向空链表中插入一个新节点,...原创 2019-07-08 18:19:08 · 275 阅读 · 0 评论 -
c++数据结构与算法
链表:数组在程序设计语言中非常有用的数据结构。数组的局限性:编译期就必须知道数组的大小。数组在计算机内存中是以相同的距离间隔开的。链表较数组的优势在于插入一个数据,不需要移动其他数据。链表是节点的集合,节点中储存着数据并连接到其他的节点。通过这种方式,节点可以位于内存中任何一种位置。每个节点存储着链表中的其他节点的地址,因此数据很容易从一个节点到达另一个节点。最灵活实现方式使用指针。...原创 2019-07-08 17:05:24 · 3111 阅读 · 0 评论 -
c++数据结构及算法
大O表示法最常用来描述渐进复杂度引入大O表示法,给定两个正值函数f和g。定义:如果存在正数c和N,对于所有的n>=N,有f(n)<=cg(n),则f(n)=O(g(n)).上述定义表明,如果对于足够大的n(或大于某自然数的N的n)存在正数c时f不大于cg,则f为g的大O表示法f(n)=2n2+3n+1=O (n2)为了选择更好的c和N,规定某个N值,f中的某项应该时最大项,...原创 2019-06-26 18:48:40 · 348 阅读 · 0 评论 -
c++数据结构与算法
复杂度示例:原创 2019-07-05 10:11:46 · 646 阅读 · 0 评论 -
C++数据结构及算法
学习算法都应该了解算法复杂度,第一章来说明算法复杂度算法度分析计算复杂度以及渐进复杂度同一个问题可以用效率不同的算法来解决,当处理数据项增长时,这种差距就会比较明显,所以引入了一种称为“计算复杂度”的标准来衡量算法。计算复杂度表示应用一种算法需要付出多大努力或者成本多少,这种成本可以用很多标准来衡量,不同的应用场合决定了成本的不同的含义。本人介绍两种:空间、时间。时间因素通常空间因素更为重...原创 2019-06-26 14:36:36 · 219 阅读 · 0 评论 -
c++数据结构及算法
可能存在的问题所有的表示法都是用于比较解决同一问题的不同算法效率。但是,如果仅用于大O表示算法的效率,一些算法就有可能遭到永久的淘汰。问题是在大O表示法中,对于所有自然数(只有极少数情况例外),大O表示法不等式成立,则f(n)=O(g(n)).违反不等式的n的数目是有限的,这足以满足定义的条件。选择足够大的c,就可以减少这种例外情况的数目,然而如果f(n)<=cg(n)中的常数c非常大(例...原创 2019-07-01 17:22:11 · 267 阅读 · 0 评论 -
c++数据结构及算法
大O表示Ω\OmegaΩ表示定义:若存在正数c和N,对于所有的n>=N,有f(n)>=cg(n),则f是g的大Ω\OmegaΩ表示若存在正数c和N,对于所有的n>=N,有f(n)<=cg(n),则f是g的大O表示...原创 2019-07-01 16:50:32 · 245 阅读 · 0 评论 -
c++数据结构与算法
稀疏表在许多应用中,表是一种选择。出于空间考虑会放弃这种选择。当只用一小部分时又是如此,这种表被称为稀疏表。考虑一个大学8000名学生和300多门课,可以使用二维数组的方法学号是列索引,课程编号是行索引。整个表可以想象学生一个学期学习4门课,表的每一列仅有4个单元存储了成绩,其余296个单元也就是98. 7%空着。较好的解决方法使用两个二维数组。数组classTaken表示每个学生所修的全部课...原创 2019-08-28 14:25:57 · 205 阅读 · 0 评论