数据结构与算法
文章平均质量分 74
Paul_0920
这个作者很懒,什么都没留下…
展开
-
算法_监视哨兵能让顺序查找时间减半! 真的吗?
在严奶奶版的《数据结构》一书中, 严奶奶引用了别的书的观点: 在顺序查找时(设表长>=1000), 引入监视哨兵, 可以减少几乎一半的查询时间。 理论上,引入监视哨兵, 的确可以优化时间。来测试一下, 看看引入监视哨兵的前后对比:#include<stdio.h>#include<time.h>#define TIMES 10000#d...原创 2019-04-18 09:09:18 · 718 阅读 · 0 评论 -
算法_如何计算时间复杂度
一、概念时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)比如:一般总运算次数表达式类似于这样:a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+fa ! =0时,时间复杂度就是O(2^n);a=0,bO(n^3);a,b=0,cO(n^2)依此类推eg:(1) for(i=1;i //循环了n*n次,当然是O(n^2) f原创 2017-04-09 08:51:32 · 693 阅读 · 0 评论 -
一、复杂度分析(上)
1、大 O 复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间。但是,如何在不运行代码的情况下,用“肉眼”得到一段代码的执行。以下举两个例子:(1)如果每执行一句话,消耗一个unit_time,该代码执行了(2n+2)*unit_time。所有代码的执行时间 T(n) 与每行代码的执行次数成正比。T(n) = (2n+2) 综上分析,该段代码的时间为 T...转载 2018-12-23 23:38:04 · 160 阅读 · 0 评论 -
二、复杂度分析(下)
上一篇讲了时间复杂度分析,以及空间复杂度分析;这篇从要从四个方面去分析复杂度:最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度、均摊时间复杂度。1、最好、最坏情况时间复杂度首先分析以下例子:由于在循环中有一个 if 判断语句,所以无法粗略的定义该段代码的时间复杂度为O(n)。在这里我们就需要引入三个概念最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度。...转载 2018-12-25 11:49:47 · 178 阅读 · 0 评论 -
三、数组
一、概念数组:数组是一种线性表数据结构。他用一组连续的内存空间,来存储一组相同类型的数据。根据概念延伸分析得,1、根据数组的概念,延伸出一组概念,线性表 和 非线性表线性表:顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。如:数组、链表、队列、栈都是线性表结构。非线性表:在非线性表中,数据之间的关系并不是简单的前后关系,比如:二叉树、堆...转载 2019-01-05 14:36:06 · 140 阅读 · 0 评论 -
四、链表
一、概念1、数组是一块连续的区域,需要堆内存的要求比较高。而链表不需要一块连续的存储空间,它通过指针将一组零散的内存块串联的起来使用。有三种比较常用的链表:单链表、双向链表、循环链表。1、单链表 单链表有一个头结点和一个尾节点,习惯的第一个节点叫做头结点,最后一个节点叫做尾节点。头结点用来记录链表的基地址,尾节点是一个NULL地址。 2、循环链表 循环链表...转载 2019-01-05 18:59:57 · 115 阅读 · 0 评论 -
C语言常见的小算法 一(斐波那契数列、回文、质数检查、金字塔)
1、斐波那契数列 -----1 1 2 3 5 8 13用常见的两种方式实现(非递归 和 递归):#include<stdio.h>/*递归实现*/int Fibonacci_recursion(int num){ if(num <= 2) { return 1; } return ...原创 2019-04-25 19:31:52 · 912 阅读 · 0 评论