我試圖找到Gillespie算法的時間複雜度。隨機分量算法的時間複雜度(Gillespie算法)
通用算法可以發現:Here
更多擴展版本:Here
的假設是,反應的數目和蛋白質的數目是恆定的。這可以讓我通過單獨的時間變量來計算時間複雜度。
但是,由於時間增加,每次迭代都基於隨機值,所以我陷入困境。讓我詳細說明(刪除不相關的代碼):
所以這是一般的循環,每次迭代反應被更新,然後currentTime被更新。
currentTime = 0.0;
while(currentTime < timeEnd)
{
reactions->calcHazard();
currentTime += this->getNextTime();
}
函數getNextTime計算新時間。
double Gillespie::getNextTime()
{
double randVal;
randVal = ((double) rand()/(double)(RAND_MAX));
while (randVal == 0)
{
randVal = ((double) rand()/(double)(RAND_MAX));
}
return ((1.0/reactions->getSum())*(log(1.0/randVal)));
}
新時間大小的計算是基於一個隨機值R.這裏的另一個變量組件是反應結果 - > getsum。該函數的返回值是
sum(k*A(t))
其中K和A(t)爲兩個矢量,k是用於每個反應和A(t)的概率是蛋白質中的時間t的數量。
有關時間增加的更好解釋可能由上一個鏈接的第7頁提供。
是否有可能對此的時間複雜性(tStart - > tEnd迭代)說些什麼?或者,如果不包括有關#proteins和#reactions的信息,這是不可能的?
我可能錯誤地製造了蛋白質的數量。不同蛋白質的數量不會改變。然而,每種蛋白質的量確實會增長或收縮。程序的輸入是(T,P,R,Rc),其中T =時間,P =不同蛋白質的數量,R =可能的反應及其相應的反應變化。所以A(t)總是能夠改變的,我不能假設一個均衡是永遠實現的。它也可能處於振盪狀態。 但是我認爲你對於更大的N(endtime)是正確的,每次迭代所需的工作量保持不變!錯過了那個,ty – Dwarrel