用于计算Java代码的大O时间复杂度的工具?

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

int dcount = 24423567; int a = 0; if (dcount == 0){ a = 1; } String ds = Integer.toString(dcount); String[] sa = ds.split("(?<=.)"); HashSet hs = new HashSet(); Collections.addAll(hs, sa); a = hs.size(); if (dcount < 0) a--; System.out.println(a); 

正如@emory指出的那样,自动确定任意一段代码的大O时间复杂度是不可能的(证据是从停止问题中减少)。 但是,有些工具可以通过在几个不同的输入上运行来尝试通过经验来衡量一段代码的复杂性。 在Goldsmith,Aiken和Wilkerson的论文“Measuring Empirical Computational Complexity”中描述了一种这样的工具。 它的工作原理是尝试对程序的运行时与其输入大小进行回归。 该工具名为trend-prof ,可在线获取。

希望这可以帮助!

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

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

以下方法在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; } 

使这个负数的工作留给读者一个exericse;)