解决时间复杂性,算法产生了什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决时间复杂性,算法产生了什么?相关的知识,希望对你有一定的参考价值。
我很困惑解决时间复杂性的问题。我理解如何确定算法是O(1)
还是O(n)
等。但是,你总是手动解决运行时间,还是算法输出运行时间?我不确定O(1)
的算法是做什么的???
在练习中,我需要测量不同大小的阵列的时间复杂度。绘制运行时间与输入大小的关系图。
时间复杂度计算实际上是手动的。您正在研究算法并找出您编写的算法的运行时复杂性。该算法不输出时间复杂度。
正如您所提到的,您了解如何确定算法的复杂性,我认为您需要绘制一个类似于以下内容的图形。
练习可能希望您绘制一个图表,该图表根据输入大小显示您的算法将如何执行(即需要多长时间)。
运行时复杂度只不过是根据给定的输入大小对算法的执行情况进行测量或预测。在O(1)
的情况下,您的算法将始终在固定时间内提供所需的结果,这与输入大小无关。
了解O(1)运行时间:
例如,我写了一个O(1)
算法,需要5秒钟才能为单个输入提供结果。现在,如果算法提供100个数据点作为输入(即输入大小为100),算法将花费5秒钟。然后,如果输入大小为99999,则仍需要5秒钟才能提供预期结果。
了解O(n)运行时间:
现在让我们举一个O(n)
算法的例子 - 这为单个输入提供了2秒的预期输出。现在输入大小的增加将增加该算法的运行时间。例如,如果输入大小为10,则运行时间为20秒,对于500输入大小,运行时间为1000秒。
我希望你明白这个主意。您只需绘制一个图表,该图表显示根据您的输入大小运行算法所需的时间。
希望有所帮助!
让我们考虑最坏的情况复杂性(符号'O'),并且随着时间的复杂性,我们实际上并没有计算时间,因为它可以从问题到问题,然后如何确定哪个算法更好?思考过程是,运行时间取决于不同的样本大小'n'。现在问题出现了多少依赖于n。在最差/最佳/平均情况下,根据我们给出的扫描需要做多少扫描
n , log(n) , nlog(n)....
让我们说任何问题让它成为你的图形问题,并在最坏的情况下询问你的代码将会对每个节点进行多少次迭代。然后你就可以达到复杂性。
2n , 3n are regarded as n complexity why? , because our initial assumption is n>>
唯一的学习方法就是问问自己这个问题,并在纸上推断它然后尝试匹配,慢慢地你可以弄清楚看到algotithm中的模式。
O()
表示法计算在最坏情况下将执行多少指令。假设您有一个程序,您有以下循环 -
for(int i = 0; i < n; i++)
{
//some operation
}
所以这个循环将运行n
次。所以时间的复杂性将是O(n)
。
现在假设你的程序有两个for循环 -
for(int i = 0; i < n; i++)
{
//some operation
}
for(int i = 0; i < n; i++)
{
//some operation
}
所以,时间的复杂性将是O(n+n)
或O(2n)
。但是在渐近符号或O()
表示法中,我们通常忽略任何不变的部分。所以我们简单地说时间复杂度是O(n)
。
现在,潜水深一点。假设你有以下程序 -
for(int i = 0; i < n; i++)
{
for(int i = 0; i < n; i++)
{
//some operation
}
}
那么,让我们计算最终将运行多少指令。这是n*n
或n^2
。所以时间的复杂性将是O(n^2)
。类似地,如果有三个或更多嵌套循环,我们将简单地计算最终将运行多少指令。
现在O(1)
是什么? - 你现在应该明白 - 如果指令的总数是1或任何其他常数,那就是O(1)
。
那么O(logn)
- 以二进制搜索为例。在二进制搜索中,我们将数组切割成两半。因此,在数学上,二进制搜索可以在长度数组上运行的最长时间是logn
。所以我们的时间复杂性是O(logn)
这些是一些基本技术。显然有很多变化。但要点是 - 在最坏的情况下将运行多少操作/指令。
以上是关于解决时间复杂性,算法产生了什么?的主要内容,如果未能解决你的问题,请参考以下文章