我想對初始陣列 ( dF
) 進行磁區,并基于廣度級別方法對獲得的磁區迭代執行相同的操作。從初始陣列 ( dF
)開始,如果兩個陣列滿足特定條件,則獲得兩個陣列(見partition_array_(dF, intIter, listMed)
下文;生成 2 個整數陣列),并且對每個獲得的磁區(廣度級別明智)重復該程序,直到該內部條件不再滿足那么我想回傳獲得磁區的最后一級。
磁區是根據int
從另一個 ints 陣列中迭代選擇的值完成的intIter
。我的迭代方法如下:
public ArrayList<List<Integer>> partition_rec(List<Integer> dF, Iterator<Integer> intIter, List<Integer> listMed) {
ArrayList<List<Integer>> partitions_ = new ArrayList<List<Integer>>();
ArrayList<List<Integer>> partitions_bf = new ArrayList<>();
partitions_.add(dF);
while ( partitions_.size()!=0) {
partitions_bf = new ArrayList<>(partitions_);
for (int j=0;j< partitions_.size();j ) {
List<Integer> dss = partitions_bf .get(j);
numberPartsBf = partitions_bf .size();
if (intIter.hasNext())
currentInt = intIter.next();
else intIter = listMed.iterator();
partitions_bf .addAll(partition_array_(dss, currentInt , listMed));
numberPartsAf = partitions_bf .size();
if (numberPartsAf > numberPartsBf && partitions_bf .contains(dss)) partitions_bf .remove(dss);
if (j == partitions_.size()-1){
if (partitions_.size() == partitions_bf.size()) return partitions_bf;
partitions_ = new ArrayList<>(partitions_bf );
break;
}
else if (!intIter.hasNext()) intIter = listMed.iterator();
}
}
return partitions_bf ;
}
1.我希望這個演算法只回傳最后一級子磁區(最后一個for回圈獲得的最小陣列)。
2.確保在無法獲得新磁區時停止該演算法。
我想確保它的邏輯是正確的。
其他問題:是否有任何演算法優化可用于更緊湊的代碼?
輸入:串列:[1,2,4,5,7,8,10,11]; ListMed ArrayList: [6,3,9] intIter是 listMed 迭代值之一。
輸出陣列串列:[1,2]、[4,5]、[7,8]、[10,11]
驅動程式代碼:
List<Integer> dF = {1,2,4,5,7,8,10,11};
List<Integer> listMed = {6,3,9};
Iterator<Integer> its = listMed.iterator();
ArrayList<List<Integer>> res = partition_rec( dF, intIter, listMed);
uj5u.com熱心網友回復:
我相信這段代碼與遞回廣度優先演算法等效且更緊湊。當沒有更多的磁區可以完成時它會停止:
public static List<List<Integer>> partition_rec(List<Integer> dF, Iterator<Integer> medIter, List<Integer> listMed) {
List<List<Integer>> toPartition = new LinkedList<>();
toPartition.add(dF);
return recursion(toPartition, medIter, listMed, new ArrayList<>());
}
private static List<List<Integer>> recursion(List<List<Integer>> toPartition, Iterator<Integer> medIter, List<Integer> listMed, List<List<Integer>> noMorePartitionable) {
if (toPartition.isEmpty()) return noMorePartitionable;
medIter = reiterateIfNeeded(medIter, listMed);
List<Integer> toPartitionHead = toPartition.remove(0);
List<List<Integer>> partitions = partition_array_(toPartitionHead, medIter.next(), listMed);
if(partitions.isEmpty()) noMorePartitionable.add(toPartitionHead);
toPartition.addAll(partitions);
return recursion(toPartition, medIter, listMed, noMorePartitionable);
}
private static Iterator<Integer> reiterateIfNeeded(Iterator<Integer> medIter, List<Integer> listMed) {
return medIter.hasNext() ? medIter : listMed.iterator();
}
要磁區的串列存盤在toPartition
. 當它們不再可磁區時,它們會累積在noMorePartitionable
. 一旦toPartition
為空,noMorePartitionable
則回傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400700.html