如何理解計算物理中的元胞鏈結列表(Cell Linked List)演算法?

時間 2021-05-31 01:58:54

1樓:小侯飛氘

@專治各種不收斂 把技術細節回答的差不多了,我來介紹一下元胞鍊錶這個演算法。

在分子模擬中,經常要計算某個粒子與其他粒子之間的相互作用。這個作用往往與距離密切相關,因此需要頻繁的搜尋粒子周圍的「鄰居」。

不妨把粒子比喻成乙個個租客,他們住在一棟很大的公寓樓(模擬空間)裡。假設此時你要確定A租客的鄰居以及室友的名單,最傻大粗的辦法當然是把整棟樓的租客都排查一遍,但這麼做顯然太費事。省事一點的做法是按房間(元胞)號來排查:

判斷A自己的房間號,假設為506。

確定包括506自身在內的附近9個房間(405~407,505~507,605~607)。

逐一確定以上9個房間內的租客名單。

窮舉法(a)和元胞鍊錶法(b)搜尋近鄰粒子示意圖

顯然,為了完成以上步驟,你需要先把公寓樓劃分成乙個個房間,並且要有每個房間的租客資訊表。

在分子模擬中,粒子就是租客,整個模擬空間就是公寓樓,人為劃分出來的元胞就是公寓樓的房間,而元胞鍊錶就是房間的租客資訊表。

租客資訊表裡沒有真的住人,它只是記錄了門牌號、租客個數、每個租客的姓名,床號(粒子的具體座標)等資訊的乙個表,它大概長這樣:

門牌號:516

租客1:張狗蛋(5號床鋪)

租客2:李麻子(2號床鋪)

...租客n:王小六(m號床鋪)

分子模擬中的粒子是會到處遊走的,相當於租客經常換房間。因此,租客資訊表(元胞鍊錶)需要時不時的進行租客搬出、搬入等增減更新,且房間內住的租客上限不好確定。因此,在計算機中,租客資訊表不方便用陣列形式表達,往往以鍊錶的形式儲存。

這也是為什麼演算法名字中有「鍊錶」二字的原由。

計算物理:從原理演算法到最新進展

如何理解元學習中的「元」字?

googol 如何理解 元 你可以理解為現在的神經網路無法抽取更深層次的 偽守恆性 所以要元學習,元元學習,元元元學習。所以問題回到了,這種被動的方法可以抽取更深層次的抽象嗎?效率高否?靈活否?否!一邊去。 天一神水 前面已經有很多解釋了,再來個偷懶的,wiki上給出的解釋 同時指出了元學習的幾個要...

如何理解計算複雜性中的oracle

Peter Pan 你應該已經知道怎麼回事了,不過我還是想補充下前乙個答案沒提到的東西。在量子演算法裡面,假設乙個Oracle能實現,要麼是有經典的知識證明這個東西在經典世界是可以有效實現的 進而對應到量子 要麼很可能 公認或者符合直覺 在量子上可以有效實現。經典的計算複雜度我不大懂,不過在量子上用...

有限元在計算流體力學中的地位如何?

Fem的理論早已完備,有自己的封閉社群,Hughes 是最大山頭。做fem流體的人,肯定明白fvm的人在搞什麼,反過來不是。科研期間開發了上億節點的vms求解器,已發了雜誌畢業。Fem從數學上可以說出許多優勢,可起步晚,工業基礎不好。只要結果差不多,沒人關心用什麼原理算的。上面有人提到DG,個人覺得...