回溯演算法(十進位制轉二進位制)
阿新 • • 發佈:2018-12-12
【概念】
回溯演算法實際上一個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。許多複雜的,規模較大的問題都可以使用回溯法,有“通用解題方法”的美稱。
十進位制轉二進位制一般做法:
public void binaryToDecimal(int n){
int t = 0; //用來記錄位數
int bin = 0; //用來記錄最後的二進位制數
int r = 0; //用來儲存餘數
while(n != 0){
r = n % 2;
n = n / 2;
bin = r * Math().pow(10,t);
t++;
}
System.out.println(bin);
}
為了瞭解回溯的思想,採用回溯方法去做:
public class Main {
public static void main(String[] args) {
int[] A = new int[3];
Binary(5, 3, A);
}
public static void Binary(int num, int n, int[] A){
if(n < 1){
// 判斷是否是想要的結果
if(cal_binary(A) == num){
for(int i = 0; i < A.length; i++){
System.out.print(A[i]);
}
}
} else{
A[n-1] = 0;
Binary(num, n-1, A);
A[n-1] = 1;
Binary(num, n-1, A);
}
}
// 二進位制轉十進位制
public static int cal_binary(int[] A){
int res = 0;
int p = 0;
for(int i = A.length-1; i >= 0; i--){
res+=Math.pow(2, p)*A[i];
p++;
}
return res;
}
}