2016-03-08 103 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)的复杂性。