画家拼图 - 估计

时间:2014-06-13 10:01:00

标签: algorithm analysis

此问题基于2001年的a puzzle by Joel Spolsky

一个男人"得到一个街头画家的工作,画在路中间的虚线。" 第一天他完成300码,在第二个--150,而第三个甚至更少。老板很生气,要求解释。

"我无法帮助它," 说这个家伙。 "我每天都离油漆罐越来越远了!"

我的问题是,你能估计他在第3天所涵盖的距离吗?

链接线程中的一个注释确实得到了一个精确的解决方案,但我的问题是关于一个足够精确的估计 - 比如说10% - 很容易从一般原则中得出。

2 个答案:

答案 0 :(得分:0)

这里有很多未知数 - 他的行走速度,他的绘画速度,画笔中的油漆持续多久......

但显然这里有两个进程。一个是二次方 - 它是在油漆罐和油漆点之间来回走动。另一种是线性的 - 它本身就是绘画的过程。

考虑到第10天甚至第100天,很明显线性成分变得可以忽略不计,并且过程变得非常接近二次 - 行走几乎一直持续。相反,在第一天的前几分钟,它接近线性。

我们可以说 t 作为距离 s 的函数的时间遵循幂律 t~s ^ a ,系数变化 a = 1.0 ... 2.0 。这也意味着 s~t ^ b,b = 1 / a

应用empirical orders of growth analysis

第1天和第2天之间的 b 系数近似为

b(1,2) = log (450/300) / log 2 = 0.585        a(1,2) = 1/0.585 = 1.71

正如预期的那样,系数低于2.在第2天和第3天之间的时间段内,我们可以将其设置为 1.71 2.0之间的中间值

a(2,3) = 1.85        b(2,3) = 0.54          450*(3/2)**0.54 = 560 yards

因此,第三天所涵盖的距离可以估算为560 - 450 = 110码。

如果 a 系数已经具有最大可能值 2.0 ,那该怎么办?(这是不可能的)?然后,450*(3/2)**0.5 = 551码。而对于另一个极端,如果它是相同的 1.71 (它显然不可能),450*(3/2)**0.585 = 570

这意味着估计110码是合理的,两边的误差小于10码。

答案 1 :(得分:0)

考虑四个假设: -

painting speed = infinity

walking speed = x

he can paint only infinitly small in one brush stroke.

he leaves his can at starting point.



The distance he walks for painting dy road at y distance = 2y

Total distance he walks = intgeration of 2y*dy = y^2 = y^2

Total time he can paint y distance = y^2/x

Time taken to paint 300 yards = 1 day

(300)^2/x = 1

x = 90000 yards/day

Total time he can paint distance y = y^2/90000


(y/300)^2 = 2      after second day

y = 300*2^(1/2) = 424

Day 1 = 300
Day 2 = 424-300 = 124
Day 3 = 300*3^(1/2)-424 = 520 - 424 = 96

Ans : 300/124/96  assuming the first day its 300