簡體   English   中英

如何計算有多少個大小為n的位序列(設置了k個位,並且位值發生c次變化)?

[英]How to calculate how many bit sequences of size n with k bits set and c changes of bit values exist?

我們知道,計算設置了k個位的n個長度位序列的數量等於C(n,k)= n!/(k! (nk)!)*。

但是我最近問自己,一旦設置了其他條件,您將如何考慮這個問題:位值的數量發生變化。 例如,對於n = 4和k = 2,我們有6個解:

1-0011

2-0101

3-0110

4-1001

5-1010

6-1100

現在假設我們只想獲得位值有兩個變化的序列。 現在只有兩種解決方案:

1-0110(從0開始,更改為1,然后再更改為0)。 2-1001(從1開始,更改為0,然后再更改為1)。

如何快速計算解決方案的數量(不生成每個組合並進行計數)? 我認為可以將初始位算作更改而不會過多改變答案,因此可以隨意進行。

額外的問題:給定組合的k位和c個位數的變化的組合,以相同的k位集合和c個位數的變化的相同數量生成下一個組合的最快方法是什么?

這是一個骨灰級的問題。 首先從一個0 s和1 s交替的順序開始,然后進行所需的位數更改,然后將其余的0 s和1 s放入骨灰盒。

示例: n=20k=8c=4

考慮bistring以0開頭的情況。 (c+1)交替位開始,進行c更改:

01010

此時,您仍然需要放置9 0 s和6 1 s。 讓我們先放置0 s。 在不增加任何位更改的情況下,我們可以通過多少種方式放置剩余的9個0 有3個“ ur”放置“球”( 0 s):

0 ... 1 0 ... 1 0 ...
   ^       ^       ^

(9+3-1) choose 3種方式將9個球放入3個骨灰盒中。

一旦放置了0 s,我們還需要放置1 s。 通過類似的推理,我們在2個骨灰盒中放置了6個球( 1 s),可以用(6+2-1) choose 2種方式來完成。

由於0 s和1 s的排列是獨立的,因此我們將結果相乘:對於長度為20的位串,有((9+3-1) choose 3) * ((6+2-1) choose 2)種方式假設您從0開始,則 8 1 s具有4位更改。

您仍然需要添加剩余的大小寫(從1開始,因此第一步的結果是10101 ),可以用完全相同的方法來解決。

假設我們有一排n無法區分的物體,例如紅球。 我們可以通過幾種方式將它們分為k非空組? 那很容易,對吧? 第一組從第一個對象開始,其他每個組都必須從某個不同的對象開始。 因此,我們可以通過選擇第一個對象和剩余的n-1對象中的k-1來構造一個分區,我們可以用C(n-1, k-1)種不同的方式來完成。

現在假設我們有另一排m無法區分的對象,例如藍色球,並且我們想將它們分為j組。 但這是完全相同的問題,解決方案必須是C(m-1, j-1)

好的,現在假設我們要構造一行對象,其中n是紅色, m是藍色,其中共有c組在紅色和藍色之間交替。 現在,有兩種可能性:

  1. 該行將從一個紅色的球開始。 如果c為偶數,則將有c/2紅色組與c/2藍色組交錯。 如果c為奇數,則紅色組比藍色組多,因此將有ceil(c/2)紅色組和floor(c/2)藍色組。 (如果c偶數,那么floor(c/2)ceil(c/2)都恰好是c/2因此,在兩種情況下我們都可以使用floor和ceil公式。)

    無論如何,我們可以將紅色的球分成幾組,將藍色的球分成幾組,然后對它們進行交織。 因此,存在C(n - 1, ceil(c/2) - 1) × C(m - 1, floor(c/2) - 1)可能的排列。

  2. 該行將從一個藍色的球開始。 完全相同的分析適用,只是nm反。

因此,安排的總數為:

C(n - 1, ceil(c/2) - 1) × C(m - 1, floor(c/2) - 1) +
C(n - 1, floor(c/2) - 1) × C(m - 1, ceil(c/2) - 1)

這只是對您的問題的重寫,該問題具有k 1和nk零,具有c-1轉換(導致c組)。 我將剩下的代數步驟留給讀者(以及簡化奇數組計數)。

暫無
暫無

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

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