- 相關(guān)推薦
java通用組合算法如何實現(xiàn)
Java是一個純的面向?qū)ο蟮某绦蛟O(shè)計語言,它繼承了 C++ 語言面向?qū)ο蠹夹g(shù)的核心,Java舍棄了C ++語言中容易引起錯誤的指針(以引用取代)、運算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。以下是小編為大家搜索整理的java通用組合算法如何實現(xiàn),希望能給大家?guī)韼椭?更多精彩內(nèi)容請及時關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
存在一個類似{31311133,33113330}這樣的集合,經(jīng)過8取5組合,其他位置用非字母數(shù)字字符替代,比如使用*號,得到類似{3***1133,***13330,... ...}這樣的集合;
還要求對于{3***1133,***13330}這樣的集合,再次經(jīng)過5取3組合,其他位置用非字母數(shù)字字符替代,比如使用*號,得到類似{*****133,*****330,3***1*3*,... ...}這樣的集合。
對于這樣的要求,實現(xiàn)的思路如下:
首先,主要思想是基于信息編碼原理,通過掃描字符串,將10組合變?yōu)?1組合。
其次,對于每個數(shù)字字符串,設(shè)置一個單線程,在單線程類中設(shè)置一個List用來存放待處理數(shù)字字符串(可能含有*號,或者不含有)中每個數(shù)字的(而非*號)索引位置值;
再次,設(shè)置BitSet來標(biāo)志每個位置是否被*號替換得到新的組合字符串。
最后,在掃描原始待處理數(shù)字字符串的過程中,根據(jù)設(shè)置的字符列表List中索引,來操作BitSet,對于每一個BitSet得到一個新的組合。
使用Java語言實現(xiàn)如下:
package org.shirdrn;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
/**
* 通用組合拆分類(基于單線程)
*
* 可以完成兩種功能:
*
* 第一,可以將完全數(shù)字串拆分成為含有*號的字符串。
* 例如:輸入集合{31311133,33113330},Splitter類會遍歷該集合,對每個字符串,創(chuàng)建一個SplitterThread
* 線程來處理,如果是2取1組合,即starCount=8-2=6,經(jīng)過線程處理得到類似******33,*****1*3等結(jié)果
*
* 第二,根據(jù)從帶有*號的字符串經(jīng)過拆分過濾后得到的字符串集合,對其中每一個字符串進(jìn)行組合
* 例如:輸入集合5取1組合字符串集合{3***1133,***113330}
*
* CommonSplitter類會遍歷該集合,對每個帶有*號的字符串,創(chuàng)建一個SplitterThread
* 線程來處理,如果是2串1組合,即starCount=8-3-2=3,經(jīng)過線程處理得到類似******33,*****1*3等結(jié)果
*
* @author 時延軍
*
*/
public class CommonSplitter {
private int starCount;
private boolean duplicate;
private Collection filteredContainer;
public Collection getFilteredContainer() {
return filteredContainer;
}
/**
* 構(gòu)造一個Spilitter實例
*
* @param container 輸入的待處理字符串集合
* @param starCount 如果對于長度為N的數(shù)字字符串,進(jìn)行M組合(即N取M),則starCount=N-M
* @param duplicate 是否去重
*/
public CommonSplitter(Collection container, int starCount, boolean duplicate) {
this.duplicate = duplicate;
this.starCount = starCount;
if(this.duplicate) { // 根據(jù)指定是否去重的選擇,選擇創(chuàng)建容器
filteredContainer = Collections.synchronizedSet(new HashSet());
}
else {
filteredContainer = Collections.synchronizedList(new ArrayList());
}
Iterator it = container.iterator();
while(it.hasNext()) {
new Thread(new SplitterThread(it.next().trim())).start();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
【java通用組合算法如何實現(xiàn)】相關(guān)文章:
權(quán)重隨機(jī)算法的java實現(xiàn)08-13
冒泡排序算法原理及JAVA實現(xiàn)代碼方法10-16
java如何實現(xiàn)漢諾塔08-08
Java基于余弦方法實現(xiàn)的計算相似度算法示例09-03
Java排序算法06-17
java中全排列是如何生成算法09-05