數組最接近的兩個元素之間的距離,所以我自學算法,這本書我買了,我有一個僞代碼用於查找的數字陣列兩個closetst元件之間的距離尋找在數量
MinDistance(a[0...n-1])
Input: Array A of numbers
Output: Minimum Distance between two of its elements
dMin <- maximum integer
for i=0 to n-1 do
for j=0 to n-1 do
if i!=j and | A[i] - A[j] | < dMin
dMin = | A[i]-A[j] |
return dMin
但是,我想對此算法解決方案進行改進。改變已經存在的內容,或者一起重寫。有人可以幫忙嗎? 我寫了Java中的函數和類來測試僞代碼嗎?那是對的嗎?再一次,從效率的角度來看,我該如何做得更好。
//Scanner library allowing the user to input data
import java.lang.Math.*;
public class ArrayTester{
//algorithm for finding the distance between the two closest elements in an array of numbers
public int MinDistance(int [] ar){
int [] a = ar;
int aSize = a.length;
int dMin = 0;//MaxInt
for(int i=0; i< aSize; i++)
{
for(int j=i+1; j< aSize;j++)
{
dMin = Math.min(dMin, Math.abs(a[i]-a[j]);
}
}
return dMin;
}
//MAIN
public static void main(String[] args){
ArrayTester at = new ArrayTester();
int [] someArray = {9,1,2,3,16};
System.out.println("NOT-OPTIMIZED METHOD");
System.out.println("Array length = "+ someArray.length);
System.out.println("The distance between the two closest elements: " + at.MinDistance(someArray));
} //end MAIN
} //END CLASS
所以我更新了函數,最大限度地減少了調用Math.abs兩次。我還能做些什麼來改善它。如果我要重新編寫它,是否會改變我的循環,或者只是理論上運行得更快。
public int MinDistance(int [] ar){
int [] a = ar;
int aSize = a.length;
int dMin = 0;//MaxInt
for(int i=0; i< aSize; i++)
{
for(int j=i+1; j< aSize;j++)
{
dMin = Math.min(dMin, Math.abs(a[i]-a[j]);
}
}
return dMin;
}
您將dMin初始化爲0,並用「// MaxInt」對其進行註釋。您可以通過「Integer.MAX_VALUE」獲得java中的最大整數。 – Ethan 2016-02-10 18:15:26