【问题标题】:time complexity for following function以下函数的时间复杂度
【发布时间】:2015-08-01 16:06:45
【问题描述】:

谁能说出以下代码块的时间复杂度

private static void Multiply(int num1, int num2)
{           
        long p,b,h1,h2,l1,l2,z0,z1,z2,m1,m2;
        p = num1.ToString().Length-2;
         b=Convert.ToInt32(Math.Pow(10,Convert.ToDouble(p)));
        l1=num1%b;
        h1 = num1 - l1;
        l2 = num2 % b;
        h2 = num2 - l2;
        m1=num1 / b;
        m2=num2 / b;
        z0 =  l1*(m1+m2);
        z1 = m1*(h2 + Math.Abs(l1 - l2));
        z2=l1*l2;
        Console.WriteLine("Result is :"+((z0 +z1)*b+z2));
        Console.ReadLine();            
}

【问题讨论】:

  • 欢迎来到 Stack Overflow。 时间复杂度究竟是什么?你能澄清你的问题吗?你有什么问题?你的变量是什么?您的结果值是多少,您实际期望的值是多少?请阅读FAQHow to Askhelp center 作为开始..
  • 实际上是两个大数的乘法,num1 ,num2 将数字作为输入,结果显示在控制台上。所以我想知道上述函数的时间复杂度是多少
  • 如果您正在寻找大 O 表示法,我相信这是 O(1),因为复杂度不是由输入算法的数据量决定的。也就是说,无论为两个输入变量传入什么,算法都将花费特定的时间。 en.wikipedia.org/wiki/Time_complexity

标签: c# optimization time-complexity


【解决方案1】:

据我所知,最常见的时间复杂度表示法是 Big-O,我将在这个答案中分享相同的内容。时间复杂度为O(1),假设Math.Pow计算为O(1).ToString()方法为O(1)。是O(1),因为每个步骤只会执行一次。

在一般情况下,如果我们考虑.ToString().Length 的时间复杂度,那么它将是O(length of num1),因为从intString 的转换需要O(length of num1)O(number of digits)。但是当我们处理int时,它最多有11位数字,这是恒定的,我们可以说时间复杂度是O(1)

【讨论】:

  • 注意:string.Length 本身是 O(1)(长度与字符串一起存储)
  • 那太好了,我以为当我们调用length时会动态计算。但是当你把一个整数转成String,然后调用length,会不会还是O(1)
  • 从 int 到 string 本身的转换将是 O(N),其中 N 是数字中的位数(以十进制形式写入时)。
  • 所以,O(length of num1) 成立。将答案从长度复杂度修改为转换时间复杂度:)
  • 从技术上讲,但您通常不会将其计入 OP 代码的复杂性中,因为 N 最多为 11(包括减号);它对确定复杂性没有帮助,而且确实具有误导性。可以这样想:如果你绘制一个相对于num1num2 值的时间图,它会是一条水平线吗?是的,它会(出于所有意图和目的)。因此它是 O(1)
猜你喜欢
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多