最大間隙問題

2021-06-12 10:22:06 字數 1532 閱讀 7458

問題描述:

最大間隙問題:給定n 個實數x1, x2 ,..., xn,求這n 個數在實軸上相鄰2 個數之間的最大差值。假設對任何實數的下取整函式耗o(1),設計解最大間隙問題的線性時間演算法。

程式設計任務:

對於給定的n 個實數x1,x2,...,xn,程式設計計算它們的最大間隙。

資料輸入:

輸入資料由檔名為input.txt的文字檔案提供。檔案的第1 行有1 個正整數n。接下來的1 行中有n個實數 x1,x2,...,xn 。

結果輸出:

程式執行結束時,將找到的最大間隙輸出到檔案output.txt中。

輸入檔案示例 輸出檔案示例

input.txt 

52.3 3.1 7.5 1.5 6.3

output.txt

3.2

問題分析:

1.找出n個資料中的最大值max和最小值min

2.將max-min的長度平均分為n-1份,這裡將這n-1個線段叫做n-1個桶,那麼剩下的n-2個元素將必將落在這n-1個桶裡,並且肯定有乙個桶是空的(除了min和max),這裡有個規律,同乙個桶內的數之間的間隙都小於等於桶的大小,而相鄰兩個非空桶邊界(這裡的桶的邊界指的是桶裡最大和最小的數)之間的間隙肯定有乙個大於等於桶的大小(因為n-1個桶裡至少有乙個空桶)。所以,n個數之間最大間隙肯定等於相鄰非空桶邊界之間的最大間隙。

源**如下:

#include

#include

#define min -10000000

#define max 100000000

double maxgap(double a,int n)

for(i=0;i

//printf("min is %f,max is %f\n",min,max);

double bucket_gap=(max-min)/(n-1);

for(i=0;i

if(bucket_min[index]>a[i])

bucket_min[index]=a[i];

bucket_count[index]++;

//printf("%lf,%lf\n",bucket_max[i],bucket_min[i]);

}double maxgap=-1;

double left,right;

for(i=0;i

j++;

}double gap=right-left;

if(gap>maxgap)

maxgap=gap;

i=j;

if(i==n-2)

break;

}return maxgap;

}int main(int argc,char *argv)

double *a=(double *)malloc(n*sizeof(double));

int i=0;

for(i=0;i

double max_gap=maxgap(a,n);

printf("最大間隙為%f\n",max_gap);

return 0;}

最大間隙問題

最大間隙問題 問題描述 最大間隙問題,給定n 11,x2,xn,求這n個數在實軸上相鄰2個數之間的最大差值。假設對任何實數的下取整函式耗時o 1 設計乙個計算複雜性最低的演算法解決最大間隙問題。演算法設計 對給定的n個實數x1,x2,xn,計算它們的最大間隙。資料輸入 輸入資料由檔名為 zdjian...

最大間隙問題

給定n個實數,求出相鄰的兩個數,這兩個數的差值是所有相鄰數的最大 例如 1 3 7,8,則答案是3,7 思想如下 找出最大值和最小值,則所有的兩個數 m n max min n 1 因此,設定n 1 個區間,區間長度為 max min n 1,將所有數按照與min的差值對映到這些區間裡 則所有的兩個...

最大間隙問題

問題描述 最大間隙問題 給定n個實數x1,x2,xn,求這n個數在實軸上相鄰2個數之間的最大差值。假設對人格實數的下取整函式耗時o 1 設計解最大間隙的問題的線性時間演算法。演算法設計 對於給定的n個實數x1,x2,xn,計算它們的最大間隙。結果輸出 將找到的最大間隙輸出到檔案output.txt。...