算法(algorithm)是一个非常广泛的概念,在不同的领域有不同的含义。在计算机领域中,算法也有其特定的含义而不是普遍意义上理解的应用级算法。
计算机科学中,算法是用于解决特定问题或执行特定任务的一个清晰、精确、有限的指令集合。算法执行后必然产生一个或多个结果,为了获得结果,每个算法还会有零个或多个输入内容作为前置条件。算法的清晰性是指每个步骤都没有歧义;精确性是指每次的执行结果都一样;有限性是算法在有限的步骤内可以执行完成。
为了清晰的表达算法,可以用两种方式对算法进行描述:伪代码和流程图。伪代码是一种结构化的文章描述,介于自然语言和符号化的编程语言之间。它与代码十分接近,但并不考虑开发语言执行过程中的细节,例如:内存管理、数据存储等。流程图用几种图形表示不同的计算机操作,再用线条将这些操作连接到一起,形成操作的执行顺序。
伪代码和流程图示意图
评估算法包括时间复杂度和空间复杂度。时间复杂度指当待解决的问题规模扩大时,所消耗的时间按什么比例进行增长。最理想的复杂度是O(1),运行时间与问题规模无关是一个常数时间。但更多的时候时间会按照线性增长O(n)或指数级增长O(n^2),我们需要通过算法将时间复杂度降低到O(log n)或O(nlog n)。降低时间复杂度的最有效办法就是增加空间复杂度,算法的设计就是不断的平衡时间和空间复杂度。
计算机算法的最终目的是解决数据的查询问题,为了能够快速进行查询就需要对数据进行“排序”等预处理,并且配合数据结构解决数据之间的组织关系和数据存储问题。不同的数据结构决定着可采用的算法。因此衍生出,树形存储结构的深度优先搜索(DFS)和广度优先搜索(BFS);数组和链表存储结构的冒泡排序、快速排序和归并排序等。
算法的含义还有很多,它们都是在不同领域用于解决特定问题的方法。作为应用类的AI算法就包括图像识别算法、语音识别算法以及当下最火的LLM大语言模型和可以生成动画的SORA模型。