barnes-hut 演算法
參考 該演算法對區域進行4分割。直到區域中只包含1個或者0個元素。
如下圖
通過分割構造出如下樹。
遞迴構造樹的演算法
1樹中每乙個非null節點儲存該區域中星體的等效值。bool tree::buildtree(nbodynode *tree, complex start, complex end, vector&plants)
9if (plants.size() == 1
) 15 vectorwrapers[4
];16
int centerx = (start.real() + end.real()) / 2;17
int centery = (start.imag() + end.imag()) / 2
;18 complex center = complex(centerx, centery);
19 complex sub = complex();
20for (vector::iterator i = plants.begin(); i != plants.end(); i++) else
if (sub.real() < 0 && sub.imag() > 0
) else
if (sub.real() > 0 && sub.imag() < 0
) else
if (sub.real() >= 0 && sub.imag() >= 0
) 31}32
int width = tree->width() / 4
;33 tree->body() =plant();
34bool ret = true;35
if (wrapers[0].size() > 0
) 40
if (wrapers[1].size() > 0
) 46
if (wrapers[2].size() > 0
) 52
if (wrapers[3].size() > 0
) 57
return
ret;
58 }
若是星體,儲存本身。若不是,儲存該區域中的等效星體。
即星體1 質量m1 位置(x1,y1)星體2 質量m2 位置(x2,y2)
等效星體 質量m = m1+m2 位置(x = (x1*m1+x*m2)/m, y = (y1*m1+y2*m2)/m);
如下圖
s 為該區域的寬度
d 為a星體到藍色區域等效星體的距離
若 d/s
則該區域可以被等效,否則計算該區域的子區域。
若區域本身是乙個星體,則直接計算該星體對a的萬有引力。不用計算 d/s
github 實現
P問題,NP問題,NPC問題,NP hard問題
1.p問題 乙個問題能找到乙個在多項式時間裡解決他的演算法 2.np問題 在多項式時間找不到問題的解,但可在多項式時間驗證問題的解 所有p問題都是np問題 3.npc問題 存在乙個np問題,所有其他np問題都可以約化為它 是乙個np問題 所有np問題都可約化為它 一元二次方程可以約化一元一次方程 一...
問題 I n皇后問題
在n n 格的棋盤上放置彼此不受攻擊的n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在n n格的棋盤上放置n個皇后,任何2 個皇后不放在同一行或同一列或同一斜線上。設計乙個解n 後問題的佇列式分支限界法,計算在n n個方格上放置彼此不受攻擊的n個皇...
問題的問題
有些問題是人出的,或者人造成的 而有些問題是 上帝 出的。我們可以說成是人題和天題。人題一般都是可以解決的,而天題,人根本就找不到答案。人題的解決不會給我們帶來快樂,而天題帶給我們的只是苦惱和困惑。人從出生到死亡,一直都處於迷失和困惑中,因為大部分的東西他都不知道是怎麼回事。是的,他可以不知道,同樣...