算法入门
# 算法架构图解

# 算法入门
当我们谈论算法时,我们谈论的是解决问题的方法和步骤。在计算机科学中,算法是一系列明确定义的指令,用于执行特定任务或解决特定问题。算法在各个领域都起着至关重要的作用,从数据处理到人工智能,无处不在。
一、算法简介 1.1 什么是算法 算法可以被视为一种计算过程,通过一系列有序的步骤来执行特定的任务。它是一种数学概念,通常由一组输入、输出和执行步骤组成。一个好的算法应该是正确的、高效的,并且适用于特定问题。
1.2 算法的特性 明确定义: 算法应该具有明确的步骤,对于任何给定的输入,都应该产生确定的输出。 有限性: 算法必须在有限步骤内结束,不会无限循环或无法终止。 输入: 算法可以有零个或多个输入,这些输入是用来执行特定任务的数据。 输出: 算法应该产生一个或多个输出,以表示完成任务的结果。 1.3 算法的度量指标 时间复杂性: 衡量算法执行所需时间的指标,通常用大O表示法来表示。较低的时间复杂性通常意味着更高的性能。O(f(n)):n为问题的规模,f(n)为执行次数的系数为1的最小阶,O(f(n))表示时间复杂度。 空间复杂性: 衡量算法在执行过程中所需内存空间的指标。与时间复杂性类似,我们希望尽量减少算法的空间占用。表示与世界复杂度一样。
i++ 和 ++i 有什么区别
++i 先使 i 先自加一,然后返回 i
i = 1; j = ++i; (i is 2, j is 2)
i++ 先返回 i,再使 i 自加一,
i = 1; j = i++; (i is 2, j is 1)
# 二、算法知识框架
- 线性数据结构:数组、链表、栈、队列、哈希表,元素之间是一对一的顺序关系。
- 非线性数据结构:树、堆、图、哈希表。
非线性数据结构可以进一步划分为树形结构和网状结构。
- 树形结构:树、堆、哈希表,元素之间是一对多的关系。
- 网状结构:图,元素之间是多对多的关系。
值得说明的是,所有数据结构都是基于数组、链表或二者的组合实现的。例如,栈和队列既可以使用数组实现,也可以使用链表实现;而哈希表的实现可能同时包含数组和链表。
- 基于数组可实现:栈、队列、哈希表、树、堆、图、矩阵、张量(维度 的数组)等。
- 基于链表可实现:栈、队列、哈希表、树、堆、图等。
链表在初始化后,仍可以在程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后长度不可变,因此也称“静态数据结构”。值得注意的是,数组可通过重新分配内存实现长度变化,从而具备一定的“动态性”。
# 1.线性结构
数组
链表
单向链表
环形链表
双向链表
栈
队列
单向队列
双向队列
哈希表
# 2.非线性结构
二叉树
完美二叉树
完全二叉树
完满二叉树
平衡二叉树
二叉搜索树
多叉树
堆
大顶堆
小顶堆
图
邻接矩阵
邻接表
# 算法系列架构
# 基本算法思想
贪心算法
分治算法
动态规划算法
回溯算法
枚举算法
递归算法
# 常见经典算法
排序
搜索
查找
字符串匹配
其他