Я создал этот алгоритм, который все, что он делает, находит пары целых чисел, которые имеют один и тот же продукт, а целые числа в парах должны быть разными. Продукт не должен превышать 1024. Это самый простой способ, которым я мог бы это сделать, есть ли способ повысить эффективность и временную сложность этого алгоритма?Улучшить временную сложность этого алгоритма?
Благодаря
import java.util.ArrayList;
public class Pairs {
public static void main(String [] args){
int nums[] = new int[1024];
for(int i = 1;i<=1024;i++){
nums[i-1] = i;
}
findPairs(nums);
}
static void findPairs(int [] nums){
ArrayList<IntPair> pairs = new ArrayList<IntPair>();
ArrayList<Products> products = new ArrayList<Products>();
IntPair tempObject;
Products tempProduct;
int tempMultiplication = 0;
for(int i =0;i<nums.length;i++){
for(int j=0;j<nums.length;j++){
tempObject = new IntPair(nums[i],nums[j]);
pairs.add(tempObject);
}
}
for(IntPair p:pairs){
tempProduct = new Products(p.x,p.y);
if(tempProduct.product <= 1024){
products.add(tempProduct);
}
}
for(int i = 0;i<products.size();i++){
tempMultiplication = products.get(i).product;
for(int j = 0;j<products.size();j++){
if(products.get(j).product == tempMultiplication)
{
if(products.get(i).x == products.get(j).x || products.get(i).y == products.get(j).y) {
}
else if (products.get(i).x == products.get(j).y || products.get(j).x == products.get(j).y || products.get(i).x == products.get(i).y){
}
else{
System.out.println("Matching pair found:("+ products.get(i).x + ","+products.get(i).y+")" + "("+ products.get(j).x + ","+products.get(j).y+")");
}
}
}
}
}
}
Соедините все (отдельные) целые числа, поместите их в «Map>», где ключ является продуктом, а значение представляет собой список пар с этим продуктом. –
Здесь многое можно улучшить. Использование set/map позволит избежать много итераций (также обратите внимание, что j = 0 должно быть j = i + 1) – Jack
Вы не можете улучшить худшую временную сложность: если вы ищете пару вещей, у вас есть чтобы быть как минимум «O (n^2)». Все, что вы можете сделать, это уменьшить мультипликативную константу. –