java - 埃拉托色尼筛的运行时
问题描述
我目前正在为学校做一个筛子。到目前为止,这是我的代码:
public static List<Integer> sieve(int input) {
int[] numbers = new int[input - 2 + 1];
int prime = 2;
// start of with 2 since first prime w/ specific multiples
int counter = 0;
for (int i = prime; i <= input; i++) {
numbers[counter] = i;
counter++;
}
// Main sieve logic: remove all multiples of that number (except itself), move onto next number in ArrayList (which must be prime)
for (int x = 0; x < numbers.length; x++) {
for (int j = findIndex(numbers, prime) + 1; j < numbers.length; j++) {
if (numbers[j] % prime == 0) {
numbers[j] = 0;
}
}
for (int k = findIndex(numbers, prime) + 1; k < numbers.length; k++) {
if (numbers[k] != 0) {
prime = numbers[k];
break;
}
}
}
pushZerosToEnd(numbers, numbers.length);
List<Integer> cleanerResult = new ArrayList<>();
for (int y = 0; y < numbers.length; y++) {
if (numbers[y] != 0) {
cleanerResult.add(numbers[y]);
}
}
return cleanerResult;
}
// Assume that pushZerosToEnd() and findIndex() do their specified action
因为这涉及许多循环,所以我知道这种方法效率不高,或者对于更大的输入来说运行时间很长。但是,到目前为止,我如何找到当前代码的平均运行时间(在 Big O 中)?
解决方案
推荐阅读
- java - 使用模式在 Java 中重复代码重构
- sql - SQL 查询运行缓慢 - 参数嗅探
- graphql - 无法在单个 GraphQL 查询中组合本地和远程数据(Next.js + Apollo)
- arrays - 查找两个数组之间匹配值的字典替代方法
- r - dplyr if else 没有 else
- javascript - 如何遍历 Vue 组件的子组件
- jakarta-ee - 在 Websphere 上实现 Jaeger 开放式跟踪
- java - 要接受 -d @json ,在 rest api 中应该如何写 put 方法
- javascript - parseFloat 将摄氏温度的 NaN 返回到华氏温度
- sql - ORACLE:AND 运算符的替代方案