//輸出最長公共子串(lcs)
//二維陣列veca記錄的是兩個字串xi和yj的lcs長度
int lcs_length(const string &str1, const string &str2,
vector> &veca, vector> &vecb)
for (j = 0; j <= str2.length(); j++)
for (i = 1; i <= str1.length(); i++)
else
else
}} }
return veca[str1.length()][str2.length()];}
//該函式用於輸出乙個lcs的序列
//這裡輸出的順序是先向上尋找,再向左尋找
void merge(int *array, int low, int middle, int high) //合併
while(i <= middle) //保證前半部資料錄入暫存
a[k++] = array[i++];
while(j <= high) //保證後半部資料錄入暫存
a[k++] = array[j++];
for(i = low; i <= high; i++) //將暫存的資料重新填充至array[low]--array[high]中
array[i] = a[i - low];
}void mergesort(int *array, int low, int high)
}int main()
mergesort(array, 0, n - 1); //進行排序
for(int j = 0; j < n; j++) //輸出排列結果
} int main()
cout<
}
遞迴與分治策略
1 全排列問題 設r n 是要進行排列的n個元素。集合x中元素的全排列記為perm x 求r n 的全排列perm r n 用遞迴演算法求解 1 找出遞迴子結構性質 即原問題的解包含了子問題的解,且子問題的描述與原問題相同。這就可以用子問題的解來構造原問題的解。設r i r n 這是乙個子問題。設 ...
遞迴與分治策略
1.遞迴 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。1 階乘函式 include using namespace std int main int factorial int n 2 fibonacci數列 include using namespace st...
分治策略與遞迴
先看 資料結構與演算法分析 中對分治策略的解釋 把問題分成兩個大致相等的子問題,然後再遞迴地對他們進行求解,這是 分 治 階段將兩個子問題的解合併到一起並可能再做些少量的附加工作,最後得到整個問題的解。由定義可以看出,分治需要進行兩步操作 分 將問題恰當的劃分為需要迭代處理的兩個子問題,治 將兩個子...