【发布时间】:2014-02-06 16:17:04
【问题描述】:
这是我从老师那里得到的额外作业。
杯子排列成树状结构,如下所示:
1
2 3
4 5 6
1 号杯子装满需要 10 秒,然后溢出到 2 号和 3 号杯中。(假设没有溢出)。由于水流被分开,杯子 2 和 3 需要 20 秒才能装满。总的来说,通过将水倒入杯子 1 来装满杯子 3,需要 30 秒。第 5 杯需要 50 秒,以此类推。
这是一个表格,其中包含正确的行值和流体到达下一个杯子所需的秒数。
1(10)
2(30) 3(30)
4(70) 5(50) 6(70)
提出的问题是针对边界为 r
我已经为此苦苦思索了大约 24 小时,但我离解决它还差得远。我知道这与帕斯卡的三角形和递归有关。我还要指出,这不是一个评分作业,而只是一个老师提出的一个未评分的有趣问题。
编辑: 在我的笔记中添加了一个更易于理解的数据结构。
1: 1
2: 1 2
3: 1 2 3
鉴于这种结构,我发现根据以下公式,水流分布到它下面的杯子的比例与帕斯卡三角形有关
h(r,c)=P(n,c)/2^(n-1)
where P(n,c) returns the number contained in the according row in Pascal's triangle
然后我用它用以下公式计算秒数:
t(r,c)=(2^(n-1)/P(n,c))*10
前 3 行是这样,但在那之后就分崩离析了,因为杯子上方的 2 个杯子的水流不会同时开始。
我还尝试了一个递归函数,它可以计算其父级,它们位于 (r-1,c) 和 (r-1,c-1) 中并应用前面的公式,但由于 i 的原因它不正确上面已经解释过了。
【问题讨论】:
-
你这个问题的第一句和最后一句有些矛盾...
-
一个半答案:你在正确的轨道上使用帕斯卡三角形。但有一件事:不要考虑“填充时间”,而是考虑“填充率”:1 号杯为 0.1,2 号和 3 号杯为 0.05,等等。
-
@KarolyHorvath 我认为它是 50,因为 2 和 3 都流入一次(30 秒后),所以它会以与它们相同的速度填充
-
如果一个节点有多个父节点,这不是一棵树。
-
@KarolyHorvath,第 5 杯需要 50 秒,因为第 1 杯需要 10 秒,第 2 和第 3 杯需要 20 秒,然后第 5 杯与第 2 杯的流量相同。 1/4 + 1/4 = 1/2。由于我忙于工作和其他事情,我花了 24 小时在这上面,它只是在我的脑海里出现了一段时间。
标签: algorithm math data-structures