Java 用区间法降低圈复杂度
下面的java代码给出了相当高的圈复杂度。我想找到一种方法来适当减少它。我最好怎么做Java 用区间法降低圈复杂度,java,cyclomatic-complexity,Java,Cyclomatic Complexity,下面的java代码给出了相当高的圈复杂度。我想找到一种方法来适当减少它。我最好怎么做 需要明确的是,代码根据值是否在两个限制之间获得值的相应结果。值本身可以是-10000到+200000之间的任何整数。问题主要在于小于或等于运算符,这妨碍了库的简单使用。两个极限之间的范围可能不同,我们所说的范围是100000,一个例子是你可能正在寻找的区间[ 来自Wikipedia;大O表示法的时间复杂性: | Average | Worst case ---------------------
需要明确的是,代码根据值是否在两个限制之间获得值的相应结果。值本身可以是-10000到+200000之间的任何整数。问题主要在于小于或等于运算符,这妨碍了库的简单使用。两个极限之间的范围可能不同,我们所说的范围是100000,一个例子是你可能正在寻找的区间[ 来自Wikipedia;大O表示法的时间复杂性:
| Average | Worst case
----------------------------------
Space | O(n) | O(n)
Search | O(log n) | O(n)
Insert | O(log n) | O(n)
Delete | O(log n) | O(n)
如果您一开始就创建一次BST并简单地重复使用它,这将允许您加快搜索速度。如果您要向我们提供有关数据传播的更多信息,则可以使用其他技术对其进行改进并测试每个限制:
private int function getBasedOnInterval(int value) {
int result = RESULT15;
// consider LIMITS as an array containing 0, LIMIT1...LIMIT13
// consider RESULTS as an array containing RESULT1...RESULT14
for(int index = 0; index < LIMITS.length; index++) {
if(value <= LIMITS[index]) {
result = RESULTS[index];
breaks;
}
}
return result;
}
你能给出一些示例值吗?LIMITxx是以设定的间隔吗?它们是随机的吗?如此简单,人们可能会想为什么我没有想到它。事实上,问题主要在于else分支,它没有限制。用它打开实际上解决了问题。
private int function getBasedOnInterval(int value) {
int result = RESULT15;
// consider LIMITS as an array containing 0, LIMIT1...LIMIT13
// consider RESULTS as an array containing RESULT1...RESULT14
for(int index = 0; index < LIMITS.length; index++) {
if(value <= LIMITS[index]) {
result = RESULTS[index];
breaks;
}
}
return result;
}