一、数据结构简介

数据结构是相互间存在特定关系的数据的集合,分为逻辑结构和物理结构。

1、逻辑结构\

集合结构:数据元素之间没有特别的关系,仅同属相同集合。

线性结构:数据元素间是一对一的关系

树形结构:数据元素间存在一对多的层次关系

图形结构:数据元素之间是多对多的关系

2、物理结构

物理结构是逻辑结构在计算机中存储形式,分为顺序存储结构和链式存储结构。

顺序存储结构将数据存储在地址连续的存储单元里。

链式存储结构将数据存储在任意的存储单元里,通过保存地址的方式找到相关联的数据元素。

二、算法简介

算法是特定问题求解步骤的描述,是独立存在的一种解决问题的方法和思想。

1、算法的特性

输入:有0个或多个输入

输出:至少有1个或多个输出

有穷性:算法在有限的步骤后应该自动结束而不会无限循环。

确定性:算法中的每个步骤都有确定的含义,不会出现二义性

可行性:算法的每一步都是可行的

正确性:算法对于合法数据能够得到满足要求的结果,能够处理非法输入,并得到合理的结果。

可读性:算法要便于阅读、理解和交流

健壮性:算法不应该得到莫名其妙的结果

性价比:利用最少的资源得到满足要求的结果

2、算法效率的度量

效率评估是工程中算法最重要的附加特性。

(1)、事后统计法

比较不同算法对同一组输入数据的运行处理时间。

缺点:

A、为了获得不同算法的运行处理时间必须编写相应程序

B、运行处理时间严重依赖硬件以及运行时环境

C、算法的测试数据选取困难

(2)、事前分析统计

依据统计的方法对算法效率进行评估

影响算法效率的主要因素:

A、算法采用的策略和方法

B、问题的输入规模

C、编译器产生的代码

D、计算机的执行速度

算法效率的简单估算:

三种求和算法的关键部分的操作数量分别为2n,n,1。随着问题规模的增大,操作数量的差异会越来越大,效率差异也会越来越大。

不同算法操作数量的对比

算法操作数量对比的实例一:

n<=3时,算法B优于算法A。随着n的规模增大,算法A优势比较明显。

算法操作数量对比的实例二:

n=1时,算法C与算法D效率相同。随着n规模的增大,算法C优势明显优于算法D。

判断算法的效率时,操作数量中的常数项和其他次阶项常常可以忽略,只需要关注最高阶项。

3、算法的复杂度

(1)算法的时间复杂度

算法时间复杂度是算法运行后对时间需求量的定性描述。

由于主要关注算法的效率问题,因此主要讨论算法的时间复杂度。

O表示法

算法的效率严重依赖于操作(Operations)数量,操作数量的估算可以作为时间复杂度的估算,在判断时首先关注操作数量的最高阶项。

O(2) ==> O(1)

O(3n+3)==>  O(3n) ==> O(n)

O(3n^2+n+4) ==> O(n^2)

常见的时间复杂度:

(2)算法的空间复杂度

算法空间复杂度是算法运行后对空间需求量的定性描述。

通常使用S(n)表示算法的空间复杂度。使用时间复杂度的推导方法推导空间复杂度。

当算法所需的内存空间大小为常数时,算法的空间复杂度为S(1)。

通常情况下,算法的时间复杂度更受关注。可以通过增加额外空间降低时间复杂度。

算法是解决具体问题的步骤,数据结构是算法解决问题的载体。

4、算法实例

一个数组中存储着1——1000的数字,每个数字可能出现多次或者不出现,找出出现次数最多的数字。

void search(int array[], int len)
{//总计可能出现1000种可能值int sp[1000] = {0};int max = 0;for(int i = 0; i < len; i++){//遍历数组,数组中某个数组出现一次增加统计1次sp[array[i] - 1]++;}for(int i = 0; i < 1000; i++){if(max < sp[i]){max = sp[i];}}for(int i = 0; i< 1000; i++){if(max == sp[i]){cout << "Number:" << i + 1 << endl;cout << "Count:" << max << endl;}}
}

使用空间换时间,算法的时间效率为O(n)。

数据结构(一)——数据结构简介相关推荐

  1. (一)数据结构与算法简介

    数据结构与算法简介 目标 掌握数据结构与算法的理论知识 补齐算法短板 梳理前端与算法结合点,不再纸上谈兵,将算法用于实战 三部曲 理论:数据结构与算法的特点.应用场景等等 刷题:做一些算法题,推荐使用 ...

  2. 算法与数据结构(part1)--算法简介及大O表示法

    学习笔记,仅供参考 文章目录 算法与数据结构--基于python 数据结构和算法简介 算法引入 例题A 算法的概念 例题A的优化 算法效率的衡量 时间复杂度与大O记法 例题A的时间复杂度 如何理解大O ...

  3. 2021-11-15 数据结构与算法简介

    数据结构与算法简介,Leetcode入门及攻略 1. 数据结构与算法 1.1 相关定义 1.2 为什么要学习算法和数据结构 1.3 数据结构 1.3.1 数据的逻辑结构 1.3.2 数据的物理结构 1 ...

  4. 数据结构 python的书推荐-为什么程序员一定要学数据结构?数据结构书单推荐~...

    原标题:为什么程序员一定要学数据结构?数据结构书单推荐~ 来自:程序员书库(ID:OpenSourceTop) 人们最初使用计算机是用来处理简单的数值计算问题,当你使用计算机来处理一个问题时,一般经过 ...

  5. python需要学数据结构吗_Python新手学习基础之数据结构-对数据结构的认知

    什么是数据结构? 数据结构是指:相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 举个列子来理解这个数据结构: 数据可以比作是书本, 数据结构相当于书架,书存放在书架上, ...

  6. 自考数据结构和数据结构导论_我跳过大学自学数据科学

    自考数据结构和数据结构导论 A few months back, I decided I wanted to learn data science. In order to do this, I sk ...

  7. mysql存储map数据结构_map数据结构

    Go map实现原理 - 恋恋美食的个人空间 - OSCHINA - 中文开源技术交流社区 https://my.oschina.net/renhc/blog/2208417 // A header ...

  8. 数据结构 (一) ----- 数据结构基本概念基于数组实现线性表

    相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> 文章目录 数据结构基本概念 一.逻辑结构 二.存储结构 三.数据结构定义 四.数据结构的通用的几 ...

  9. Day739.GEO经纬度数据结构自定义数据结构 -Redis 核心技术与实战

    GEO经纬度数据结构&自定义数据结构 Hi,我是阿昌,今天学习记录的是关于GEO经纬度数据结构&自定义数据结构的内容,感谢您的关注和观看. Redis 的 5 大基本数据类型:Stri ...

  10. 考研数据结构笔记--数据结构和算法的基本概念

    考研数据结构笔记--数据结构和算法的基本概念 数据结构的基本概念 算法的基本概念 数据结构的基本概念 数据 数据是对客观事物的符合表示,在计算机科学中是指所有能输入到计算机中并且被计算机程序处理的符合 ...

最新文章

  1. vault-使用kubernetes作为认证后端
  2. 宝塔 php curl 配置,【笔记】宝塔面板配置laravel
  3. python tkinter火柴人_趣学Python编程
  4. [软件项目管理]从业余人士往专家进军的头几个月
  5. linux shell 等待输入_linux运维——基础篇
  6. java访问权限修饰符从大到小_程序员的术与道:道——Java修饰符之非访问控制修饰符...
  7. 异步和同步http请求超时机制
  8. jQuery右键菜单ContextMenu使用笔记
  9. 【人脸识别】基于matlab二值膨胀差分和椒盐滤波教室内人数统计【含Matlab源码 251期】
  10. java就业培训教程 笔记
  11. 秒表的检定及设备使用方法说明
  12. python游戏猜拳_Python之猜拳游戏
  13. Flashpaper序列号
  14. 通过Debugx5在电脑端调试微信页面
  15. 为什么我总是更新不了头像啊
  16. UVa 12325 - Zombie's Treasure Chest(暴力枚举+预处理)
  17. ROS与Web交互控制显示
  18. 软件著作权申请材料及申请流程?
  19. 小说《小城恋情》第三十三章
  20. 2021年中国纸包装行业发展现状及市场格局分析[图]

热门文章

  1. php微信公众号开发,入门篇(实现了关注公众号发送欢迎信息,发关键词自回复)
  2. 金钱数字转换为大写中文
  3. 关于调整互联网、电话订票起售时间的公告
  4. Android 客户端直播实现
  5. 1g的树莓派4b能做什么_树莓派4代B型1GB Raspberry Pi
  6. 数值计算·第八集:二阶锥规划(CVXPY版)
  7. 龙芯+银河麒麟QT环境配置+fpm打包
  8. nvcc: command not found
  9. python report_ReportPortal(自动化报表统一平台)的搭建与python推送
  10. 使用vs2019用c++创建dll库