计算Java代码大O时间复杂性的工具?

计算Java代码大O时间复杂性的工具?,java,algorithm,big-o,time-complexity,Java,Algorithm,Big O,Time Complexity,我有一个关于Java软件的时间复杂性(大O表示法)的问题。有没有一种方法可以快速计算或测试它(或者欢迎任何能为我计算的网站)。例如,我想检查以下代码片段,并可能进行改进: int-dcount=24423567; int a=0; 如果(dcount==0){ a=1; } 字符串ds=Integer.toString(dcount); String[]sa=ds.split(“(?)正如@emory所指出的,可以证明不可能自动确定任意代码段的大O时间复杂性(证明是从但是,有一些工具可以尝试通过

我有一个关于Java软件的时间复杂性(大O表示法)的问题。有没有一种方法可以快速计算或测试它(或者欢迎任何能为我计算的网站)。例如,我想检查以下代码片段,并可能进行改进:

int-dcount=24423567;
int a=0;
如果(dcount==0){
a=1;
}
字符串ds=Integer.toString(dcount);

String[]sa=ds.split(“(?)正如@emory所指出的,可以证明不可能自动确定任意代码段的大O时间复杂性(证明是从但是,有一些工具可以尝试通过在多个不同的输入上运行代码来以经验的方式测量代码的复杂性。其中一种工具在“测量经验计算复杂性”一文中进行了描述由Goldsmith、Aiken和Wilkerson编写。它通过尝试对程序的运行时与其输入大小进行回归来工作。该工具名为(已中止),可供参考


希望这有帮助!

我可能正在解决某人的家庭作业,但问题是寻求一个合理的解决方案

计算数字中的不同数字不需要字符串、集合或正则表达式,只需要一些简单的算术运算

以下方法在O(n)时间(n=输入中的位数)和恒定空间中运行:

int distinctDigits(int num) {
  if (num == 0) {
    return 1;
  }

  boolean[] digits = new boolean[10];

  while (num > 0) {
    digits[num % 10] = true;
    num /= 10;
  }

  int count = 0;
  for (boolean digit : digits) {
    if (digit) {
      count++;
    }
  }

  return count;
}

对于负数,这是留给读者的练习;)

时间复杂度通常意味着最坏情况下的时间复杂度。这个问题已经被证明是不可能的。我的意思是(大O)复杂性。也会编辑帖子。如果你想计算数字中的不同数字,那么该代码在时间和空间上肯定不是最佳解决方案。你会如何改进它?Philipp?应该更正哪些地方?@PhilippReichart:而且意图会更明显(!)不,这不是我的家庭作业,谢谢。实际上我也考虑过这种方法;但是我认为转换成字符串然后使用集合会更有效(时间复杂度)。是的,这也是一个简洁的解决方案,谢谢。虽然它没有直接回答我的问题(如上所述)但是你有1票。我担心你的解决方案没有我想象的那么好。试着检查这个000121212作为输入,它将产生一个4的值。我的代码也没有通过这个测试。
0121212
被解释为八进制数(前导零)是的,你是对的,你认为后面有一些转换,你说有工具可以通过使用不同的输入来测量复杂性。这与用户自己使用不同的输入来运行代码并计算时间有什么不同ve相同的结果?自动与手动?@Faizan-该工具不仅仅是运行程序。它添加了大量二进制指令插入来测量单个函数/代码块,当然比手动操作容易得多。原则上,您可以手动执行相同的操作,但这要难得多。@templatetypedef如果你提供报纸的名称,而不仅仅是“在本文中”,因为链接经常断开,这总是有益的。