1.1 算法无处不在
用了一些例子来说明生活中的算法
- 查字典(二分法)
- 整理扑克(插入排序)我小时候真用着这种方法
- 货币找零(贪心算法)在这里以每次都找最大面值的货币找零
1.2 算法和数据结构
1.2.1 算法定义
算法(algorithm) 是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。
- 确定性:算法的每个步骤都是明确定义的,不会产生歧义。
- 有穷性:算法必须在执行有限步骤后结束,不会无限循环。
- 输入:算法有零个或多个输入,这些输入是算法执行所需的数据。
- 输出:算法至少有一个输出,表示算法执行的结果。
- 可行性:算法中的每个步骤都必须是可执行的,即在当前的计算模型下可以实现。
- 通用性:算法通常不针对特定问题设计,而是可以应用于解决一类问题。
- 效率性:好的算法应该在时间和空间复杂度上都是高效的,即用最少的计算资源解决问题。
- 健壮性:算法应该能够处理各种输入,包括异常和边界情况,而不会崩溃或产生错误的结果。
1.2.2 数据结构定义
==数据结构(data structure)==是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具有以下设计目标。
-
逻辑结构:数据结构中数据元素之间的逻辑关系,它描述了数据元素之间的相互关系。逻辑结构通常分为线性结构和非线性结构。线性结构的数据元素之间是一对一的关系,如数组、链表、栈和队列;非线性结构的数据元素之间是一对多或多对多的关系,如图、树等。
-
物理结构:数据结构在计算机存储器中的存储方式,也称为存储结构。物理结构决定了数据元素在内存中是如何布局的,常见的物理结构包括连续存储和非连续存储。
-
数据操作:数据结构定义了可以对数据元素执行的操作,如插入、删除、查找、排序等。不同的数据结构支持不同的操作,且每种操作的效率也不同。
-
抽象数据类型(ADT):数据结构通常与抽象数据类型相关联,ADT定义了数据的逻辑结构和操作,但并不涉及具体的实现细节。例如,栈是一种抽象数据类型,它定义了压栈和弹栈等操作,但具体的实现可以是数组或链表。
-
效率:不同的数据结构在不同的操作下有不同的效率表现。例如,数组在随机访问方面效率很高,但在插入和删除时可能需要移动大量元素;链表在插入和删除时不需要移动元素,但在随机访问方面效率较低。
-
适用场景:不同的数据结构适用于不同的应用场景。选择适当的数据结构可以提高程序的性能和可维护性。
1.2.3 数据结构与算法的关系
![[Pasted image 20240804153956.png]]
总结
- 算法其实也充斥在我们的生活当中
- 算法是解决问题的一组指令或者说是一种操作步骤
- 数据结构是计算机中组织和存储数据的方式
- 算法与数据结构紧密相连
406

被折叠的 条评论
为什么被折叠?



