簡體   English   中英

計算沒有連續元素的子集總數

[英]Count the total number of subsets that don't have consecutive elements

我正在嘗試用組合學和計數子集解決相當復雜的問題。 首先,假設我們給出了集合A = {1,2,3,... N},其中N <= 10 ^(18)。 現在我們想要計算其表示中沒有連續數字的子集。

假設N = 3,A = {1,2,3}。 總共有2 ^ 3個子集,但我們不想計算子集(1,2),(2,3)和(1,2,3)。 所以總的來說這個問題我們想要回答5,因為我們只想計算剩余的5個子集。 那些子集是(空子集),(1),(2),(3),(1,3)。 我們還想打印結果模10 ^ 9 + 7。

到目前為止我做了什么

我認為這應該通過使用兩個狀態的動態編程來解決(我們是否采用第i個元素),但后來我看到N可以達到10 ^ 18,所以我認為這應該解決使用數學公式。 你能給我一些提示,我應該從哪里開始得到這個公式。

提前致謝。

看看有多少子集不包含連續元素? 在數學堆棧交換。

他們得出結論,集合{1,2,3 ... n}中的非連續子集的數量是fib(n + 2),其中fib是計算數字n + 2的斐波納契數列的函數。 。 您對n = 3的解決方案符合此解決方案。 如果你可以實現Fibonacci算法,那么你可以解決這個問題,但解決一個大到10 ^ 18的數字的問題仍然是一個挑戰。

正如這里的評論所述,您可以查看Hacker Earth上的快速加倍算法
它將在O(log n)中找到斐波納契數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM