Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套循环复杂性_C#_Algorithm_Time Complexity - Fatal编程技术网

C# 嵌套循环复杂性

C# 嵌套循环复杂性,c#,algorithm,time-complexity,C#,Algorithm,Time Complexity,我有一个C#方法: private void进程() { foreach(Vat中的Vat)//n个元素 { foreach(processResultRows中的ProcessResultRow行)//m个元素 { //这里有东西 } foreach(在_shopsList中的KeyValuePair条目)//j元素 { //还有别的吗 } } } 我知道两个嵌套循环的复杂性为O(n^2)。这个例子对吗 我还没有决定,因为在外部循环中,我有两个相同级别的for循环。规定循环没有返回,中断,并

我有一个C#方法:

private void进程()
{
foreach(Vat中的Vat)//n个元素
{
foreach(processResultRows中的ProcessResultRow行)//m个元素
{
//这里有东西
}
foreach(在_shopsList中的KeyValuePair条目)//j元素
{
//还有别的吗
}
}
}
我知道两个嵌套循环的复杂性为
O(n^2)
。这个例子对吗


我还没有决定,因为在外部循环中,我有两个相同级别的for循环。

规定循环没有
返回
中断
,并且类似(例如抛出异常)的复杂性是

O(n * (m + j)) == O(n * m) + O(n * j)
如果
m
j
都是常数,我们就有了

如果至少有一个
m
j
使得
m~n
j~n
那么我们有

// here m ~ n and j is some const
O(n * m) + O(n * j) == O(n * n) + j * O(n) == O(n**2) + O(n) == O(n**2)

正如@RobinBennet所说,答案是
O(n*(m+j))

外部循环迭代n次(每个元素一次)。 对于外部循环中的每个元素,第一个内部循环迭代m次,第二个循环迭代j次——因此对于每个元素,执行O(m+j)步。迭代n个元素,O(n*(m+j)


也就是说,假设m,j与n无关-如果,例如m=j=n,你会得到O(n^2)

它的主题,但基本上你是正确的嵌套循环是O(n^2),在你的例子中你有O(n*(n+n))=O(2n^2)=O(n^2),这是因为第三个循环不是nestead,它是“与第二个循环成线性关系,事实上,你可以有多少个非嵌套的for循环,而你仍然有o(n^2),如果for循环的长度不同,你将有o(n+m+…)^2两个内循环都引用了外循环变量?所以肯定大o符号不仅仅有
n
(外循环中的元素数),但它也有
m
(不相关的内循环中的元素数)那么
O(n*(m+j))
?@canton7这三个圆环分别有n,m,j个元素数。它们不相关。答案显然是否定的,但问题是该方法的时间复杂度是多少?
O(n*m + n*j) == m * O(n) + j * O(n) == O(n)  
// here m ~ n and j is some const
O(n * m) + O(n * j) == O(n * n) + j * O(n) == O(n**2) + O(n) == O(n**2)