java通用組合算法如何實現

來源:文萃谷 2.73W

Java是一個純的面向對象的程序設計語言,它繼承了 C++ 語言面向對象技術的核心,Java捨棄了C ++語言中容易引起錯誤的指針(以引用取代)、運算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用於回收不再被引用的對象所佔據的內存空間,使得程序員不用再為內存管理而擔憂。以下是小編為大家搜索整理的java通用組合算法如何實現,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

java通用組合算法如何實現

存在一個類似{31311133,33113330}這樣的集合,經過8取5組合,其他位置用非字母數字字符替代,比如使用*號,得到類似{3***1133,***13330,... ...}這樣的集合;

還要求對於{3***1133,***13330}這樣的集合,再次經過5取3組合,其他位置用非字母數字字符替代,比如使用*號,得到類似{*****133,*****330,3***1*3*,... ...}這樣的集合。

對於這樣的要求,實現的思路如下:

首先,主要思想是基於信息編碼原理,通過掃描字符串,將10組合變為01組合。

其次,對於每個數字字符串,設置一個單線程,在單線程類中設置一個List用來存放待處理數字字符串(可能含有*號,或者不含有)中每個數字的(而非*號)索引位置值;

再次,設置BitSet來標誌每個位置是否被*號替換得到新的組合字符串。

最後,在掃描原始待處理數字字符串的`過程中,根據設置的字符列表List中索引,來操作BitSet,對於每一個BitSet得到一個新的組合。

使用Java語言實現如下:

package drn;

import yList;

import et;

import ection;

import ections;

import Set;

import ator;

import ;

/**

* 通用組合拆分類(基於單線程)

*

* 可以完成兩種功能:

*

* 第一,可以將完全數字串拆分成為含有*號的字符串。

* 例如:輸入集合{31311133,33113330},Splitter類會遍歷該集合,對每個字符串,創建一個SplitterThread

* 線程來處理,如果是2取1組合,即starCount=8-2=6,經過線程處理得到類似******33,*****1*3等結果

*

* 第二,根據從帶有*號的字符串經過拆分過濾後得到的字符串集合,對其中每一個字符串進行組合

* 例如:輸入集合5取1組合字符串集合{3***1133,***113330}

*

* CommonSplitter類會遍歷該集合,對每個帶有*號的字符串,創建一個SplitterThread

* 線程來處理,如果是2串1組合,即starCount=8-3-2=3,經過線程處理得到類似******33,*****1*3等結果

*

* @author 時延軍

*

*/

public class CommonSplitter {

private int starCount;

private boolean duplicate;

private Collection filteredContainer;

public Collection getFilteredContainer() {

return filteredContainer;

}

/**

* 構造一個Spilitter實例

*

* @param container 輸入的待處理字符串集合

* @param starCount 如果對於長度為N的數字字符串,進行M組合(即N取M),則starCount=N-M

* @param duplicate 是否去重

*/

public CommonSplitter(Collection container, int starCount, boolean duplicate) {

icate = duplicate;

Count = starCount;

if(icate) { // 根據指定是否去重的選擇,選擇創建容器

filteredContainer = hronizedSet(new HashSet());

}

else {

filteredContainer = hronizedList(new ArrayList());

}

Iterator it = ator();

while(ext()) {

new Thread(new SplitterThread(()()))t();

}

try {

p(50);

} catch (InterruptedException e) {

tStackTrace();

}

}

熱門標籤