Algorithm 寻找水下城镇的一种算法
假设城镇附近有一座大坝,大坝顶部有一个大洞,如下图所示。Algorithm 寻找水下城镇的一种算法,algorithm,greedy,Algorithm,Greedy,假设城镇附近有一座大坝,大坝顶部有一个大洞,如下图所示。 水以1 m2/s的速度从该孔流出,建筑物在水下。 建筑物屋顶长度为1m,高度为整数。 给定一个特定的建筑物,我们必须计算该建筑物在水面以下1米的时间 我正在寻找一个贪婪的算法来计算这一次 我想了好几天,但没有找到好主意。据我所知,填充方式如下: 以下是伪代码中的算法和说明: 1)让inth[]与房屋高度一起排列。索引是房子的编号。所以数组的长度是我们考虑的x范围(或房屋数量)。如果在某个位置没有房子,则会有0(或高度为零的房子) 让f
水以1 m2/s的速度从该孔流出,建筑物在水下。 建筑物屋顶长度为1m,高度为整数。 给定一个特定的建筑物,我们必须计算该建筑物在水面以下1米的时间 我正在寻找一个贪婪的算法来计算这一次
我想了好几天,但没有找到好主意。据我所知,填充方式如下:
以下是伪代码中的算法和说明: 1)让
inth[]
与房屋高度一起排列。索引是房子的编号。所以数组的长度是我们考虑的x范围(或房屋数量)。如果在某个位置没有房子,则会有0(或高度为零的房子)让
float w[]
成为绝对水位高度与h[]
我的意思是
w[I]-h[I]
=第I栋房子上方的水深因此,我们首先应该:
copy elements from h[] to w[]
每个程序计算步骤(比如1秒)都将执行步骤2)和进一步操作
2)查找局部最小值的最后一个索引(从左侧开始):5)让
x
作为我们等待在水下1米的房子的索引。因此,决定我们是实现了目标还是应该返回步骤2):
注意可以对代码进行一点优化。我认为,这仍然是最清楚的形式。到目前为止,你做了哪些努力?我想了几天,但没有找到任何好主意。你好,阿什坎,很有趣,我是否正确理解了你的问题(见下面的帖子)-你没有接受,也没有发表评论
i=0;
while(w[i+1]<=w[i]){
i++;
if(i == w.length-1)
break; // or next step will violate array boundaries
}
count = 0;
for(j=0;j<=i;j++)
if(w[j] == w[i])
count++;
for(j=0;j<=i;j++)
if(w[j] == w[i])
w[j] += flow / count;
if (w[x] - h[x] >= 1m)
return; // we achieved the goal !!!
else
repeat from step "2)"