我正在尝试找到一种有效的方法来查找整数文本文件的最大值/最小值。我也对如何计算总比较感到困惑。我的蛮力策略:
Scanner scan = new Scanner( new File("input.txt") );
int min,max;
min=max=scan.nextInt();
while ( scan.hasNextInt() )
{
int n= scan.nextInt();
if(n<min){
min=n;
}
if(n>max){
max=n;
}
}
我认为这段代码在最好和最坏的情况下需要进行 2(n-1) 次比较。如有不妥请指正。 这是另一种方式:
while ( scan.hasNextInt() )
{
int n= scan.nextInt();
if(n<min){
min=n;
}
else if(n>max){
max=n;
}
}
这有什么区别吗?如果整数按降序排列,则仅执行 if 语句。最好的情况是 (n-1) 次比较。最坏的情况还是 2(n-1)。 这是一种不同的方法:
int min,max;
min=max=scanner.nextInt();
while (scanner.hasNextInt()) {
int num1 = scanner.nextInt();
if (scanner.hasNextInt()) {
int num2 = scanner.nextInt();
if (num1 < num2) {
if (num1 < min) {
min = num1;
}
if (num2 > max) {
max = num2;
}
} else {
if (num2 < min) {
min = num2;
}
if (num1 > max) {
max = num1;
}
}
} else {
// There is only one integer left in the file
if (num1 < min) {
min = num1;
}
if (num1 > max) {
max = num1;
}
}
}
我再次使用的最后一个成对算法我们有 (n-1) 个整数要比较,因为 1 个整数在开始时直接分配给最大值和最小值。蛮力对每个整数使用两次比较。这里我们对每对整数进行 3 次比较。 (exp: 比较 1:num1 < num2 comparison 2:num1 < min comparison 3:num2 > max) 所以总的比较是1.5(n-1)。但这假设文件中有奇数个整数。如果它是偶数,那么对于最后一个整数我们只会对那个整数进行 2 次比较。我如何计算这个的总比较?您还认为我对任何算法的其他计算是否正确?无论如何,在最坏的情况下,找到最小值/最大值的最佳方法似乎是成对算法。我知道还有其他方法可以使用递归、二进制或锦标赛方法来实现,但我只想使用简单的逻辑和我的 Java 技能。