Bitmap在排重問題上的應用

2021-09-01 17:15:02 字數 1044 閱讀 1717

其實這篇,我已經寫了好久,只是一直沒發。因為裡面還有一些問題,我還沒有解決。但是我想學習本來就是乙個更新的過程,總有一些我們是不懂的。於是我決定還是展示出來。供大家學習和討論。

問題的引入:例題:有很多個整數,排除其中重複的數。 要求:盡可能的節省空間、

要想解決此問題,重在儲存這些整數。我們通過什麼樣的結構來儲存?

問題的解決的構思:建立乙個byte陣列,其中每乙個元素的8位分別對應元素出現的情況、我們用1表示該對應的

數出現了,0表示沒有出現。然後我們遍歷整個情況,對於標記1的數都取乙個。這些數就是排重過後剩下的數。

問題的具體實現:假設整數的個數為n.我們開闢的byte陣列的大小為(n/8+1)。n%8這為byte數的第幾位數。

我定義乙個排重類:

public class paichong

/***

* @param x 為你輸入的數

*/public void fuzhi(int x)

a[i]=y;

}/**

* * @param y 你傳入需要改變的數

* @return 返回字元陣列

*/public byte changestr(byte y)

int h=t;

t=(t/2);

w=h-t*2;//記錄餘數

s[7-i]=(byte) w;

}for(int k=i+1;k<8;k++)

return s;

}public void systembyte()}}

在這個類中,fuzhi這個方法:將待排重的數,進行判斷。並修改,對應位上的值。changestr這個方法:

將byte數轉化為乙個byte陣列,再對byte陣列中元素進行操作。以上的**並沒有實現我預期的目標。

**中出現一些問題:我們改動這個數,可能會超出byte的範圍。從而它自動將其轉化為負數。還有對於

負byte數轉化為二進位制的方法。

還有值得考慮的地方,這樣的做法是否減少複雜度?如何通過移位對byte的8位數進行操作?

以及將byte陣列變成int陣列又會怎麼樣?

錯排問題(在程式中的應用)

當n個編號元素放在n個編號位置,元素編號與位置編號各不對應的方法數用m n 表示,那麼m n 1 就表示n 1個編號元素放在n 1個編號位置,各不對應的方法數,其它類推.第一步,把第n個元素放在乙個位置,比如位置k,一共有n 1種方法 第二步,放編號為k的元素,這時有兩種情況.1,把它放到位置n,那...

Python中的生成器在八皇后問題上的應用

八皇后問題是乙個經典的問題 為了保證各個皇后的安全,在乙個8x8的矩陣上,必須保證任意兩個皇后不能處於同一行 同一列以及同一條對角線上,那麼安全的擺法總共有多少種呢?好,一步步來。老話說得好,程式 資料結構 演算法。我們先來選乙個合適的資料結構。很明顯,問題中提到了矩陣,那麼二維陣列肯定是可以的,但...

卡特蘭數的推導證明以及在排列問題上的相關應用

一 前提 構建乙個 s,x 序列,其中用 s 表示入棧,用 x 表示出棧,s和x個數相同為n。顯然,在每個合理序列的任意字首子串行中,s 入棧 的個數總是大於等於x 出棧 的個數。易得,對於乙個有n個s和n個x的2n序列,它的總序列數為 c 2n,n 包括合理序列和不合理序列。那麼所要求的 合理序列...