在以前的文章,我们讨论了渐近分析如何克服了天真分析算法的问题。在这篇文章中,我们将采取一个线性搜索的示例,并使用渐近分析分析它。
我们可以有三种案例分析算法:
1)最坏的情况
2)平均案例
3)最好的情况
让我们考虑以下实施线性搜索。
c++
// c++实现的方法
#include
使用
命名空间
STD;
//线性搜索x在arr[]。
//如果x存在,则返回索引,
否则返回-1
㈡
搜索(
㈡
arr [],
㈡
n,
㈡
X)
{
㈡
i:
为
(i = 0;我< n;我+ +){
如果
(arr [i] == x)
返回
i:
}
返回
-1;
}
//驱动程序代码
㈡
主要的()
{
㈡
Arr [] = {1,10,30,15};
㈡
x = 30;
㈡
n =
尺寸
(arr) /
尺寸
(arr [0]);
cout << x <<
“在索引处存在”
<<搜索(arr,n,x);
获取字符
();
返回
0;
}
//此代码被贡献
//由Akanksha Rai
|
C
// C实现的方法
#include
//线性搜索x在arr[]。
//如果x存在,则返回索引,
否则返回-1
㈡
搜索(
㈡
arr [],
㈡
n,
㈡
X)
{
㈡
i:
为
(i = 0;我< n;我+ +){
如果
(arr [i] == x)
返回
i:
}
返回
-1;
}
/*驱动程序测试上述函数*/
㈡
主要的()
{
㈡
Arr [] = {1,10,30,15};
㈡
x = 30;
㈡
n =
尺寸
(arr) /
尺寸
(arr [0]);
Printf.
(
"%d出现在索引%d处"
, X,
搜索(arr n x));
获取字符
();
返回
0;
}
|
java.
// Java实施方法
上市
类
GFG {
//线性搜索x在arr[]。如果x存在
//返回索引,否则返回-1
静态
㈡
搜索(
㈡
arr [],
㈡
n,
㈡
X)
{
㈡
i:
为
(我=
0
;我< n;我+ +){
如果
(arr[i] == x) {
返回
i:
}
}
返回
-
1
;
}
/*驱动程序测试上述函数*/
上市
静态
无效
main (String [] args)
{
㈡
arr [] = {
1
,
10.
,
30.
,
15.
};
㈡
X =
30.
;
㈡
n = arr.length;
system.out.printf(
"%d出现在索引%d处"
, X,
搜索(arr n x));
}
}
/ *此代码由Princiraj1992贡献* /
|
Python3.
#Python 3实施方法
#线性搜索x在arr[]。如果x存在
#返回索引值,否则返回-1
def
搜索(加勒比海盗,x):
为
索引,价值
在
列举
(arr):
如果
价值
=
=
X:
返回
指数
返回
-
1
#驱动程序代码
arr.
=
(
1
,
10.
,
30.
,
15.
]
x
=
30.
打印
(x,
“在索引处存在”
,
搜索(arr, x))
#此代码是贡献的
#by princiraj1992.
|
c#
// c#实现方法
使用
系统;
上市
类
GFG {
//线性搜索x在arr[]。如果x存在
//返回索引,否则返回-1
静态
㈡
搜索(
㈡
[]加勒比海盗,
㈡
n,
㈡
X)
{
㈡
i:
为
(i = 0;我< n;我+ +){
如果
(arr[i] == x) {
返回
i:
}
}
返回
-1;
}
/*驱动程序测试上述函数*/
上市
静态
无效
Main ()
{
㈡
[] arr = {1,10,30,15};
㈡
x = 30;
㈡
n = arr.Length;
console.writeline(x +
“在索引处存在”
+搜索(arr,n,x));
}
}
/ *此代码由Princiraj1992贡献* /
|
PHP
< ?php
// PHP实施方法
//线性搜索x在arr[]。如果x
//返回索引,
否则返回-1
函数
搜索(
$ arr.
,
$ n
,
$ x
)
{
为
(
我美元
= 0;
我美元
<
$ n
;
我美元
++)
{
如果
(
$ arr.
(
我美元
] ==
$ x
)
返回
我美元
;
}
返回
-1;
}
//驱动程序代码
$ arr.
=
大批
(1,10,30,15);
$ x
= 30;
$ n
=运算符(
$ arr.
);
回声
$ x
。
“在索引处存在”
。
搜索(
$ arr.
,
$ n
,
$ x
);
//此代码被贡献
//由Akanksha Rai
|
输出:
索引2存在于索引2
最糟糕的病例分析(通常是完成)
在最坏情况下,计算算法运行时间的上界。我们必须知道什么情况会导致执行最多的操作。对于线性搜索,最坏的情况是要搜索的元素(上面代码中的x)不在数组中。当x不存在时,search()函数将它与arr[]的所有元素逐一比较。因此,线性搜索的最坏情况时间复杂度为Θ(n)。
平均案例分析(有时完成)
平均分析,我们采取所有可能的输入并计算所有输入的计算时间。总和所有计算的值并将总和除以总数的输入。我们必须知道(或预测)案件的分布。对于线性搜索问题,让我们假设所有情况都是均匀分布(包括x不在数组中)。我们把所有的情况加起来然后除以(n+1)下面是平均情况时间复杂度的值。
平均案例时间==
=Θ(n)
最佳案例分析(虚假)
在最佳案例分析中,我们计算算法运行时间的下限。我们必须知道导致最小次数的案例。在线性搜索问题中,当在第一个位置存在x时,发生最佳案例。最佳案例中的操作数是常量的(不依赖于n)。因此,最佳情况下的时间复杂性是θ(1)
大多数时候,我们做了最坏的情况分析算法。在最糟糕的分析中,我们保证了一个算法的运行时间的上限,这是良好的信息。
在大多数实际情况下,平均案例分析并不容易做到,很少完成。在平均案例分析中,我们必须知道(或预测)所有可能输入的数学分布。
最佳案例分析是假的。保证算法的下界不会提供任何信息,因为在最坏的情况下,算法可能需要数年才能运行。
对于某些算法,所有的情况都是渐近相同的,也就是说,不存在最坏和最好的情况。例如,合并排序。在所有情况下,合并排序执行θ(nlogn)操作。大多数其他分类算法具有最坏和最佳情况。例如,在快速排序的典型实现中(如果选择枢轴作为拐角元件),当已经对输入阵列进行了分类并且当枢轴元件总是在两半中划分阵列时,最坏地发生最坏的情况。对于插入排序,当阵列反向排序时发生最坏情况,并且当阵列按与输出相同的顺序排序时,会发生最佳案例。
引用:
麻省理工学院视频第一讲,算法导论。
如果您发现任何不正确的任何内容,请写出评论,或者您想要共享有关上面讨论主题的更多信息。
注意读者!现在不要停止学习。掌握所有重要的DSA概念DSA自我节奏课程以学生友好188bet2021欧洲杯的价格,成为行业准备。