最大間隙問題

2021-06-29 09:08:25 字數 1702 閱讀 9469

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

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

結果輸出:將找到的最大間隙輸出到檔案output.txt。

輸入文字示例                        輸出樣本示例

input.txt                                     output.txt

5                                                3.2

2.3 3.1 7.5 1. 5 6.3

解題思路:

開始時的思想是先排序,再找最大兩個的相鄰數的差值。但是排序的複雜度最好是o(nlogn),達不到線性。

看了一種方法是利用鴿籠原理,感覺很巧妙,先找到最大和最小數,這步複雜度是o(n),接著做最大最小·值得差,再除以n-1得到n-1的籠子,把除最大最小值的n-2的鴿子放進去,一定有乙個籠子是空的,在同乙個籠子的間距不可能是最大值,最大值一定在不同的兩個籠子中,找到每個籠子的最大值和最小值和鴿子數,從最小的籠子開始找,用後乙個有鴿子的籠子的最小值減前面乙個有鴿子的籠子的最大值,最後找到最大間距。

main.c

#include#include"filerw.h"

#define n 100

double maxcle(int n, double *x);

using namespace std;

int main()

cout << endl;

cout << maxcle << endl;

system("pause");

*/ return 0;

}// 尋找最小元素的下標

template < class t>

int mini(int n, t *x)

} return k;

}// 尋找最大元素的下標

template < class t>

int maxi(int n, t *x)

} return k;

}double maxcle(int n, double *x)

for (int i = 1; i <= n; i++)

// 儲存每個桶最大的元素

if (x[i] > high[bucket])

}// 除maxx和minx外的n-2個數放在n-1桶中

// 有鴿舍原理知,有乙個桶的空的,最大的間隙不會出現在同乙個桶中

double tmp = 0;

double left = high[1];

for (int i = 1; i <= n; i++)

}} return tmp;

}

filerw.c
#include "filerw.h"

// 清空檔案

void clearfile()

// 寫字串到檔案中

void writedata(double delta)

最大間隙問題

最大間隙問題 問題描述 最大間隙問題,給定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...

最大間隙問題

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