我在学术论文中被问到过这个问题。请告诉我答案?
arrayFind(x, A)
i =0 ;
while( i < n ) {
if(x==A[i])
return i;
else
i = i+1;
}
return –1;
假设我们有一个算法,find2D( )
,在二维n x n
数组A
中查找元素x。算法
find2D( )
循环访问 A
的行,并在每个行上调用算法 arrayFind(),
直到找到 x
或搜索了 A
的所有行。
这个算法最坏的运行时间是多少
一个。如果每行中的元素都已排序?
(二)如果每行中的元素未排序?
在给定信息的情况下,排序/不排序对最坏情况没有影响。在这两种情况下,最坏的情况是,最新行中的最新元素是要查找的元素。在这种情况下,运行时将是O(n^2),其中n
具有您用nxn
指出的含义。这是nxn
,因为您必须迭代n
行,然后在每行中进行n
比较。
如果使用二进制搜索,则排序后的示例的最坏运行时为O(n log n),最坏情况是,搜索的元素位于最后一行的中间。
由于splay树是一种不平衡的二元搜索树(brilliant.org/wiki/splay树),它不能保证最大高度为O(log(n))。因此,我认为它不能保证最坏情况下的搜索时间为O(log(n))。 但根据bigocheatsheet。通用域名格式: Splay树的最坏情况搜索时间为O(log(n))???
此处声明: TreeSet为add()/remove()/contains()提供了日志(n)时间复杂性保证。 但是使用二叉查找树,在最坏的情况下,二叉查找树可以有O(n)高度。log(n)复杂性如何“保证”?
我如何找到这段代码最坏情况下的时间复杂度?我看过许多关于发现时间复杂性的教程,我理解它们。但这一个似乎有点不同于教程中的那些。
null
我试图使优化版的贝尔曼福特算法在最坏的情况下运行。优化版我的意思是,如果在放松1轮边后,在最短距离上没有进一步更新,则终止。 例如,一个具有7个顶点的简单连通加权有向图,使得从源顶点0运行优化贝尔曼-福特算法至少使用5轮来获得正确的最短路径。 图表不能包含负权重循环。i、 e.处理顶点0的所有传出边,然后处理顶点1的边,依此类推 我知道这和周期有关。但我不太确定绘制图表的策略是否符合要求。