當前位置:成語大全網 - 書法字典 - 字典序的稠密子集

字典序的稠密子集

我就不貼代碼了,給妳出個主意。

這個問題實際上是要找到具體的壹組集數。

如果不輸出特定集合,而是輸出特定集合,那麽這個問題就很簡單了。

以N=5,K=3為例。c(5,3),5選3不重復,計算結果為(5 * 4 * 3)/(1 * 2 * 3)= 10,其中10。

然後具體列出來看看:

(1,2,3)、(1,2,4)、(1,2,5)、(1,3,4)、(1,3,5)、(1,4,5)

(2,3,4)、(2,3,5)、(2,4,5)

(3,4,5)

是的,是10。

請註意,每行由第壹個數字分隔,因此您可以看到:

如果第壹個是1,則有六套。

如果第壹個是2(但第壹個數字是2,不包含2),則有3組。

第壹個是3,有1套。

6,3,1有什麽規律嗎?具體看壹下6

六套,第壹套是1,也就是說第壹套號碼已經固定為1,不再選擇1。換句話說,1不再被選中,所以剩下的情況就變成了2、3、4和5這四個數字中的兩個。

四選二。這很熟悉。不是類似於五選三嗎?

然後計算C(4,2),(4 * 3)/(1 * 2)= 6,確實是6;這和5選3是壹樣的。

再看看6,3和1的另外兩個,也是壹樣的。三選二是三套,二選二是1套。

說到這裏,妳可能已經知道C(5,3)= C(4,2)+C(3,2)+C(2,2)。

這樣的公式看起來不是遞歸的嗎?

這裏我們可以嘗試改變初始值,比如n = 7,k = 4,結果是c(7,4)= c(6,3)+c(5,3)+c(4,3)+c(3,3)。

看到這個結果,我們可以假設c(n,k)= c(n-1,k-1)+c(n-2,k-1)...+c(k-1,k-65438=1

那麽當K==1時呢?如果妳想壹想,妳就會知道如果妳從N個數字中選擇1,結果將是N個集合。

這樣我們就可以得到集數的公式。

C(N,K)= C(N-1,K-1)+C(N-2,K-1)...+C(K-1,K-1)(K & gt;=2)

c(N,K)= N(K = 1)

現在有了公式,遞歸就很好地實現了。

INT C(N,K ){

if(K = = 1)返回N;

其他

renturn c(n-1,k-1)+c(n-2,k-1 )+...+c(k-1,k-1)//只需使用for或while。

}

求集數的思路就是這樣,但問題是要求壹個具體的集。我該怎麽辦?

在這裏設置壹個全局數組S【K+1】(設置K+1避免使用S【0】,方便閱讀代碼思路)來存儲要輸出的特定集合。

其實很簡單。既然知道了C(n,k)= C(n-1,k-1)+C(n-2,k-1)+...+C(k-1,k-1 =2),那麽C(N-1,K-1)的具體集合有什麽特征呢?答案是第壹個數字,即1。

由於第壹個數字是1,所以它是S【1】= 1;

那我們來看看。遞歸將首先執行C(N,K)= C(N-1,K-1)+C(N-2,K-1)...並輸入C(N-1,k-則為C(N-2,K-2),其特征在於第二個數為2,即S【2】= 2;

這樣下去直到第壹組出來,s【k】= k;此時處於C(N-K+1,1)中,也就是說,在壹天結束時,必須選擇數字K,並且已經選擇了前壹個數字K-1,即1,2,3,4...k-1。

X有哪些選擇?可以看出C(N-K+1,1)實際上是選擇K的N-K個數中的壹個,K+1,...,N-1,N為x .非常簡單,只需使用a for,並選擇所有這些n-k個數字。

c(N-K+1,1)已完成。哪個是遞歸的下壹個?

另壹方面,C(N-K+1,1)是如何產生的?

C(N-K+2,2)= C(N-K+1,1)+C(N-K,1)...+C(1,1)。

原來C(N-K+1,1)由此而來,所以接下來要輸入的是C(N-K,1)。

C(N-K)和C(N-K+1,1)有什麽區別?

c(N-K+1,1)是將數字K-1設為K-1,然後選擇數字K,

所以C(N-K,1),也就是數字K-1不是K-1,但是它的下壹個數字是K,並且數字K-1被設置為K,

然後繼續for並選擇從K+1到N-K-1的所有剩余數字,並輸出該集合,從而完成C(N-K,1)。

至此,90%的具體思路已經出來了,剩下最後的點睛之筆。

c(N-K-1,1),K-1的個數是K+1,然後從K+2到N中選擇1。

那麽這裏具體的K-1、K+1、K、K+2、1是怎麽計算的呢?

如果妳已經理解了思路,其實當妳得到C(N-K-1,1)時,妳就已經知道“C(N-K-1,1),而K-1的個數就是k+65438+。

如果妳不理解它,那也沒關系。妳可以先做些記號。

將初始遞歸函數C(N,K)更改為C(N,K,A,B,C,D,E)。

以n = 5和k = 3為例。讓C(5,3)將第零個數字設置為0,然後從1到5中選擇三個數字。

因此初始的C(5,3)被重寫為C(5,3,0,0,1,5,3)。

C(5,3)= C(4,2)+C(3,2)+C(2,2)

那麽C(4,2)是將數字1設置為1,然後從2到5中選擇兩個數字,因此C(4,2,1,1,2,5,2)重寫為C(4,2,2)。

C(3,2)是將數字1設置為2,然後從3到5中選擇2個數字,因此C(3,2)重寫為C(4,2,1,2,3,5,2)。

C(2,2)是將數字1設置為3,然後從4到5中選擇2個數字,因此C(2,2)重寫為C(4,2,1,3,4,5,2)。

查看這三個示例,我們可以發現A=K全局-K遞歸,B=N全局-N遞歸,C=B+1,D=N全局,E=K遞歸。

好了,剩下的10%也解決了。這個問題完成了。