最大間隙問題(線性時間演算法)

2021-07-22 09:52:30 字數 789 閱讀 3784

問題:

最大間隙問題。給定 

n個實數,求這n個實數在數軸上相鄰2個數之間的最大差值,設計解最大間隙問題的線性時間演算法。

分析:該問題最先想到可能就是排序後計算,但排序的時間複雜度最少為o(nlongn),不能滿足題意的線性時間演算法。所以有乙個解決該問題的演算法,筒排序。

該演算法的思想為,將n個數的最大值、最小值找到,在[ min ,max ]區間內,分成n-1個等大的區間,每個區間的大小為 

len = (max - min)/(n-1),然後將n個數字填入到這n-1個區間中,並根據填入的數,找到該區間內數字的最大值與最小值。除去兩邊的最大值和最小值,只需要將n-2 個數字填入到 n-1個區間中,根據抽屜原理,那至少有乙個空的區間,所以,最大間隙一定產生在兩個不同區間之間。

**如下:

#include #define inf 1<<30

struct nodex[105];

int main()

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

x[0].left=min;

x[0].right=min+len;

for(i=1;i=n-1)

temp=n-2;

x[temp].index++;

if(ans[i] > x[temp].max)

x[temp].max=ans[i];

if(ans[i] < x[temp].min)

x[temp].min = ans[i];

} double max = -inf;

for(i=1;i

線性時間求解 最大間隙問題

問題描述 給定n個亂序的實數,求這些數在實數軸上相鄰2個數之間的最大差值,假設對任何實數的下取整函式耗時o 1 設計解最大間隙問題的線性時間演算法。float max num float num arr,int n return temp float min num float num arr,in...

最大間隙問題

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

最大間隙問題

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