Algorithm 为了解决时间复杂度问题,算法产生了什么?
我不知道什么是解决时间复杂性。我知道如何确定算法是Algorithm 为了解决时间复杂度问题,算法产生了什么?,algorithm,runtime,Algorithm,Runtime,我不知道什么是解决时间复杂性。我知道如何确定算法是O(1)还是O(n)等。但是,您总是手动求解运行时间,还是算法输出运行时间?我不确定O(1)的算法是做什么的 在一个练习中,我需要测量不同大小数组的时间复杂度。绘制运行时与输入大小的关系图
O(1)
还是O(n)
等。但是,您总是手动求解运行时间,还是算法输出运行时间?我不确定O(1)
的算法是做什么的
在一个练习中,我需要测量不同大小数组的时间复杂度。绘制运行时与输入大小的关系图我们考虑最坏情况的复杂性(符号‘O’),并且随着时间复杂度,我们实际上不计算时间,因为它可以很容易地从问题到问题,然后如何确定哪个算法更好? 其思想过程是,运行时间随“n”样本大小的不同而变化。现在问题来了,它在多大程度上依赖于n。在最坏/最好/平均情况下,根据我们给出的结果,需要进行多少扫描
n , log(n) , nlog(n)....
假设对于任何问题,让它成为您的图形问题,在最坏的情况下,询问您的代码将对每个节点进行多少次迭代,然后您可以得出复杂性
2n , 3n are regarded as n complexity why? , because our initial assumption is n>>
唯一的学习方法是问自己这个问题,然后在纸上推断出它,然后尝试匹配,慢慢地,你将能够从算法中看出它的模式。O()
表示法是根据在最坏情况下执行的指令数来计算的。假设您有一个程序,其中有以下循环-
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
}
}
for(int i=0;i
那么,让我们计算最终将运行多少条指令。它是n*n
或n^2
。因此,时间复杂度将是O(n^2)
。类似地,如果有三个或更多嵌套循环,我们只需计算最终将运行多少条指令
现在什么是O(1)
现在您应该明白了-如果指令总数为1或任何其他常量,则为O(1)
关于O(logn)
——以二进制搜索为例。在二进制搜索中,我们将数组分成两半。因此,从数学上讲,二进制搜索在长度数组上运行的最长时间是logn
。所以我们的时间复杂度是O(logn)
这些是一些基本技术。显然有很多不同之处。但要点是——在最坏的情况下会运行多少操作/指令。时间复杂度计算实际上是手动的。您正在研究一个算法,并计算出您所编写的算法的运行时复杂性。该算法不输出时间复杂度 正如您所提到的,您了解如何确定算法的复杂性,我认为在练习中,您需要绘制一个类似于以下内容的图 本练习可能希望您绘制一个图表,根据输入大小显示算法的执行情况(即需要多少时间) 运行时复杂性只不过是根据给定的输入大小来衡量或预测算法的性能。在
O(1)
的情况下,您的算法将始终在与输入大小无关的固定时间内提供所需的结果
了解O(1)运行时间:
例如,我编写了一个O(1)
算法,为单个输入提供结果需要5秒钟。现在,如果为算法提供100个数据点作为输入(即输入大小为100),则该算法将精确花费5秒。然后,如果输入大小为99999,则仍需要5秒钟才能提供预期结果
了解O(n)运行时间:
现在让我们举一个算法的例子,它是O(n)
——它为单个输入提供了2秒的预期输出。现在,输入大小的增加将增加该算法的运行时间。例如,如果此处输入大小为10,则运行时间将为20秒,对于500输入大小,运行时间将为1000秒
我希望你能明白。您只需绘制一个图表,根据输入大小显示运行算法所需的时间
希望有帮助 算法是否输出运行时间,我不确定O(1)的算法是做什么的?否。算法不输出运行时间。
O(1)
算法在恒定的时间内运行(它对输入数组是不变的)。因此,您总是出于图形目的手动计算答案?可能重复的@ElliottFrisch O(1)算法不会在恒定的时间内运行,而是在有限的时间内运行。(例如,哈希表查找平均运行时间为O(1),但它不是常量)。
for(int i = 0; i < n; i++)
{
for(int i = 0; i < n; i++)
{
//some operation
}
}