2017-09-01 63 views
1

假設我有一個包含2個或更多元素的std :: vector。現在假設我想將包含排除原則應用於此向量(例如,假設其元素包含表示事件概率的長雙精度)。 在這種情況下,目標將是這個函數在傳遞一個具有N個元素的向量時,應用包含排除原則來找出所有這些事件的聯合發生的可能性。計算聯盟概率的包含排除原則

我認爲這可能需要某種模板遞歸,但我很努力地計算公式中的每個術語。這似乎是任何時候我嘗試創建代碼的概括爲任何數量的元素,它打動了我的思想,我卡住或丟失。有人提供任何建議嗎?

+0

我想你似乎在這裏有一個比編程問題更多的數學問題。或者你能否至少寫下一個簡單的例子?示例數據作爲輸入,計算或計算草圖以及預期輸出。 – Pac0

+0

你能否把它縮小到一個更具體的問題,而不是'它讓我感到頭暈,我陷入困境或迷失'?理想情況下,分享您嘗試的代碼。這樣你可以指出具體的方向。 –

+0

谷歌給了我[這個解決方案](https://e-maxx-eng.appspot.com/combinatorics/inclusion-exclusion.html)。 –

回答

1

只要所有的事件都是獨立的,這並不需要包含/排除。如果他們不是,you need more data

所有事件發生的概率等於他們的產品。

float probability(std::vector <float> eventProbability) { 
    float prob = 1.0f; 
    for(auto &p: eventProbability) prob *= p; 
    return prob; 
}