2016-03-08 33 views
0

我需要基於從數據庫中的數據行中讀取的信息創建數據桶。只要數據範圍內沒有間隔,它們就屬於同一個桶,否則將創建一個新桶,如果範圍與兩個桶重疊,則組合並擴展。使用JAVA根據值的範圍將數據放入數據桶中

然後我需要添加最後的桶到列表,但我不知道如何做到這一點。

我有以下基本的代碼示出如何桶計算:

double start,startx,stop,stopx; 

start = 0; 
stop = 0; 

//Row 1 of Data 
startx = 1; 
stopx = 2; 

if (startx > stopx) { 
    stop = stopx; 
} 

if (stopx > stop){ 
    stop = stopx; 
} 

if (startx < start){ 
    start = startx; 
} 



System.out.println("Start = " + start\n + "Stop = " + stop\n\n) 

後1行的鬥式是:開始= 1.0停止= 3.0

//Row 2 of Data 
start = 2; 
stop = 5 


if (startx > stopx) { 
    stop = stopx; 
} 

if (stopx > stop){ 
    stop = stopx; 
} 

if (startx < start){ 
    start = startx; 
} 

System.out.println("Start = " + start\n + "Stop = " + stop) 

現在存儲桶的第二行數據之後: 開始= 1.0 停止= 5.0

//Row 3 of Data 
start = 7; 
stop = 9; 


if (startx > stopx) { 
    stop = stopx; 
} 

if (stopx > stop){ 
    stop = stopx; 
} 

if (startx < start){ 
    start = startx; 
} 

System.out.println("Start = " + start + "\nStop = " + stop + "\n\n"); 

由於行3的起始範圍爲我 需要創建一個新的水桶,所以我將有兩個桶,現在已有桶範圍之外。桶1 :開始= 1停止= 5桶2:開始= 7停止= 9

//Row 4 of Data 
start = 5; 
stop = 10; 


if (startx > stopx) { 
    stop = stopx; 
} 

if (stopx > stop){ 
    stop = stopx; 
} 

if (startx < start){ 
    start = startx; 
} 

System.out.println("Start = " + start + "\nStop = " + stop + "\n\n"); 

由於4行中的數據越過桶1和2他們需要 組合,所以我有結果桶1:開始= 1停止= 10

我需要能夠結合並重新創建基於每行數據的桶,以便它們進行合適的合適。

+0

stopx如何能比自己更大? –

+0

你是對的@GregorioMerazJr。我修正了這個錯字。 – mithrix

回答

0

你要做的第一件事就是按他們的起點對你的範圍進行排序。因此,如果您有範圍1-2,2-5,7-9和5-10,請將它們排列在列表中,並按其起始編號排序,以便它們按1-2,2-5,5的順序排列-10和7-9。

然後遍歷這個列表。從第一個元素開始,創建一個具有開始1和結束2的新桶。當您看到列表中的每個元素時,檢查它是否屬於上一個桶。如果有,合併它們。如果它不製造一個新的桶。因爲你的元素是按它們的開始號碼排序的,所以如果一個元素不屬於前一個桶,那麼下面的元素也不屬於它們。

因此,當您創建新的存儲桶時,您確定所有以前的存儲桶都已完成。

這允許您只瀏覽一次元素,雖然它需要排序,所以它會有nlog(n)的複雜性。