2013-12-13 20 views
0

在我們的一個實驗中,我們繪製了一個變量的不同值的程序運行時圖,例如x cnad稱之爲plot1。我們認爲程序運行時間與變量成正比,如a,與b成反比。因此,我們還繪製了針對x的ab的圖表,並將它們稱爲plot2和plot3。驗證兩個圖的結果

爲了驗證沒有涉及其他因素,我們想以某種方式組合圖2和圖3,使得我們得到的圖接近圖1。我想繪製a/b,並嘗試二進制搜索以找到常數k

有沒有更好的方法來做到這一點?

感謝,

回答

0

不知道我對你的問題的理解是正確的,但:

我們有一個程序,它有一個輸入x,給了我們一個數(它的運行時間),T(x)的。另外,我們還有兩個其他函數,a(x)> = 0和b(x)> 0。那麼存在常數f,g,使得T(x)〜f * a(x),T(x)〜g/b(x)。 我們有函數a(x)和b(x),它們很容易計算。此外,我們可以計算一些x值的T(x),但是這種計算相當昂貴。我們想要建立估計F:T(x)= F(a(x),b(x))。 重要的是,T(x)〜f * a(x)和T(x)〜g/b(x)都不是精確的(否則我們可以測量T(1000),取f = T )/ a(1000)並且具有T(x)的公式)。

作爲一般說明,在搜索參數時,最好將表達式轉換爲與參數關係成線性關係(這樣我們可以使用最小二乘法)。我會在形式F(a,b)= exp(C)* a ^(k + 1)* b ^(k)中尋找F. 這是假設關係

ln(T(x)) ~ C+(k+1)*ln(a(x))+k*ln(b(x)) 

或者,分組後,

ln(T(x))-ln(a(x)) ~ k*[ln(a(x))+ln(b(x))]+C 

現在我們衡量T(x)的對x的某些價值觀,構建點(U,V):U = LN(T( x)) - ln(a(x)),v = ln(a(x))+ ln(b(x))並試圖找到變量k,C,使得u = k * v + C建立點(通過線性方塊或任何其他方法)。如果k非常接近0或-1,那麼意味着f * a或g/b近似值要精確得多,而另一個值應該丟棄。

P.S.爲了測量T(x)以使ln(a(x))+ ln(b(x))儘可能地變化,可能是一個好主意。