数据结构与算法基本概念

1.1 数据概念

数据:数据是描述客观事务的符号,是计算机中可以操作的对象,是能被计算机识别输入给计算机处理的符号集合。

例如:整型、实数等数值类型可直接输入,字符类型需要进行非数值处理输入到计算机,而声音、图像、视频等需要通过编码手段转换为字符数据来处理。

 1.2 数据对象、数据元素、数据项概念

数据对象:是数据元素的集合。例如:一群人。

数据元素:是组成数据的有一定意义的基本单位。例如:一个人。

数据项:多个数据项构成一个数据元素。例如:一个人的眼、耳、口、鼻。

1.3 数据结构是什么?

相互之间存在一种、或多种特定关系的数据元素的集合和原始数据的逻辑结构,物理结构有关。例如:地图数据,适合使用图结构存储;族谱数据,适合使用树结构存储。

1.4 逻辑结构和物理结构

逻辑结构:数据对象中数据元素之间的关系,面向实际问题。例如:一群人之间,他们的关系。

(1)集合结构:所有元素之间没有关系,仅同属一个集合。

(2)线性结构:数据元素之间一对一关系。

(3)树形结构:数据元素之间存在一对多关系。

(4)图形结构:数据元素之间存在多对多关系。

在解决实际问题时,需要选择合适的逻辑结构表示现实数据元素之间的关系

物理结构:数据的逻辑结构,在计算机中的存储形式,面向计算机。例如:线性表如何存储在计算机中。

(1)顺序结存储构:把数据元素存放在地址连续的存储单元中。

(2)链式存储结构:把数据元素存储在任意存储单元中,存储单元直接可连续,可不连续。例如:使用链式存储结构实现逻辑上顺序存储结构时,需要使用指针存放数据元素地址。

1.2 数据结构有哪些?

  • 线性表。可细分为顺序表、链表、栈和队列;
  • 树结构。包括普通树,二叉树,线索二叉树等;
  • 图结构。包括有向图,无向图等。

Note:数组和顺序表

  • 顺序表:一种数据结构,属于数据结构理论知识范畴。
  • 数组:不同于顺序表,数组属于编程语言范畴。例如,在java中,数组是一种数据类型。又或者说,数组是java语言中,对顺序表数据结构的实现。

1.3 数据结构和算法有什么关系?

(1)算法:解决问题的某种方式(同一个问题的不同解决方法),且往往是针对特定的数据结构操作的。

(2)算法和数据结构相辅相成,良好的数据组织结构,对算法解决问题很有帮助。例如:计算1+2+3+...+1000000,使用顺序表(支持数据随机访问)存储数据,相比于使用链表存储数据,更能提升算法效率

1.4 算法相关概念

算法所需的合适的数据结构,往往和算法实现的业务紧密相关。例如:

  • 算法实现的业务需要大量插入元素、移动元素,且数据量极大时,此时链表数据结构更适合存储数据。
  • 算法实现的业务需要大量的访问元素时,顺序表数据结构更适合存储数据。

算法的优劣:时间测算、空间测算

时间复杂度O:随着问题(数据)规模的扩大,算法时间耗费变化的规律。

例如:数据规模为1时,某种操作耗费多长时间,规模为100时,同样操作耗费多长时间。

O(1):时间随着问题规模扩大不变

O(n):时间随着问题规模扩大线性扩大

时间复杂度计算标准:估算程序指令执行的次数

时间复杂度计算示例:

注:下面的计算方式,是按照人类世界理解方式计算程序指令执行次数的,真正到cpu执行时,一条比较操作可能需要多个指令执行才能完成。 

for (int i=1;i<arrayRandomCalcul.length;i++){//i=1执行1次,i<len执行n+1次,i++执行n次,共2n+2次
        for (int j = i;j > 0;j--){//j=i执行1次,j>0执行i+1次,j--执行i次,共2i+2次
            if (arrayRandomCalcul[j] < arrayRandomCalcul[j-1])//执行1次
                swap(arrayRandomCalcul,j,j-1);//执行3次
            else break;//加了break会在不满足条件下及时退出,减少程序程序指令执行次数
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值