什么是算法?定义、类型、复杂性、示例
算法是一种定义明确的顺序计算技术,它接受一个值或一组值作为输入,并输出解决问题所需的一个值或输出。或者我们可以说一个算法是准确的当且仅当它停止并为每个输入实例提供正确的输出。考虑一个没有人可以看到里面发生了什么的盒子,我们称之为黑盒子。我们给盒子输入,它给了我们需要的输出,但是我们可能需要知道在将输入转换为所需输出背后的过程是一个算法。算法独立于所使用的语言,它告诉程序员用于解决问题的逻辑。因此,这是一个合乎逻辑的逐步过程,可以作为程序员的蓝图。
定义算法使用的真实示例:
- 考虑一个我们知道时钟在滴答作响的时钟,但是该制造商如何设置螺母和螺栓以使其继续移动,并且每 60 秒分钟指针应该移动,并且每 60 分钟时针应该移动。所以要解决这个问题,背后必须有一个算法。
- 见过有人为你烹制你最喜欢的食物吗?它需要配方吗?食谱是将生马铃薯变成冷马铃薯的顺序过程,这是算法遵循过程以获得所需输出的过程。是否需要遵循顺序?是的,为了得到我们想要的 WYWIWYG(所见即所得),必须遵循顺序是最重要的事情。
算法类型:
- 排序算法:冒泡排序、插入排序等等。这些算法用于以特定格式对数据进行排序。
- 搜索算法:线性搜索、二分搜索等。这些算法用于查找用户需要的值或记录。
- Graph Algorithms :它用于寻找问题的解决方案,例如寻找城市之间的最短路径,现实生活中的问题,例如旅行商问题。
我们为什么要使用算法?
考虑两个正在解魔方的孩子。 Aman 和 Rohon 正在求解 Rubix 立方体 Aman 知道如何通过一定数量的步骤来求解它,另一方面,Rohon 知道他会这样做,但不知道程序。 Aman 在 2 分钟内解决了立方体,而 Rohan 仍然被卡住了,到了一天结束时,他以某种方式设法解决了它(可能已经作弊,因为程序是必要的)。因此,使用程序/算法解决所需的时间比没有任何程序的时间非常有效。因此,对算法的需求是必须的。在为 IT 问题设计解决方案方面,计算机速度很快,但不是无限快。内存可能很便宜但不是免费的。因此,计算时间是有限资源,内存空间也是如此。所以我们应该明智地使用这些资源,在时间和空间上高效的算法将帮助你做到这一点。
创建算法
由于算法与语言无关,我们编写步骤来演示用于解决问题的解决方案背后的逻辑。但在编写算法之前,请记住以下几点:
- 算法应该清晰明确。
- 算法中应该有 0 个或更多定义明确的输入。
- 算法必须产生一个或多个与期望输出等效的定义明确的输出。在特定数量的步骤之后,算法必须停止。
- 算法 必须在有限步数之后停止或结束。
- 在算法中,应该提供逐步的指令,并且它们应该独立于任何计算机代码。
这里的任务是编写一个算法来乘以 2 并打印它:
Step 1: Start
Step 2: Get the knowledge of input.
Here we need 3 variables a and b will be the user input and c will hold result.
Step 3: Declare a, b, c variables.
Step 4: Take input for a and b variable from the user.
Step 5: Know the problem and find the solution using operators data structures and logic
we need to multiply a and b variables so we use * operator and assign result to c.
That is c <- a * b
Step 6: Check how to give output
Here we need to print the output. So write print c
Step 7: End
示例 1:编写一个算法来查找数组中存在的所有元素的最大值。
解决方案:
Step 1: Start
Step 2: Declare a variable max with value of first element of array.
Step 3: Compare the max with other elements using loop.
Step 4: If max < array element value change max to new max.
Step 5: If no element left return or print max otherwise goto step 3.
Step 6: End
示例 2:编写一个算法来求 6 个受试者的平均值。
解决方案:
Step 1: Start
Step 2: Declare a variable sum with value 0.
Step 3: Get sum of all the values in sum variable using loop.
Step 4: Divide sum by 6 and assign it to avg variable.
Step 5: Print avg
Step 6: End
算法复杂度
对于算法 A,它是根据大小为 n 的输入的两个参数来判断的:
- 时间复杂度:算法求解解决方案所花费的时间。它是通过计算循环的迭代次数、比较次数等来衡量的。
- 空间复杂性:算法用来解决问题的额外空间(除了必要的输入变量之外的空间)例如,如果我们使用哈希表(一种数据结构),我们需要一个数组来存储值,所以这是占用的额外空间,因此将计入算法的空间复杂度。
算法的优势
- 易于理解:因为它是对给定问题的解决方案的逐步表示,因此易于理解。
- 语言无关:它不依赖于任何编程语言,因此任何人都可以轻松理解。
- 调试/错误发现:每个步骤都是独立的/在一个流程中,因此它将发现并修复错误。
- 子问题:它是在一个流程中编写的,所以现在程序员可以划分任务,这将更容易编码
算法的缺点
- 创建高效的算法非常耗时,并且需要良好的逻辑技能。
- 讨厌在算法中显示分支和循环。