1. 程式人生 > >回溯演算法(十進位制轉二進位制)

回溯演算法(十進位制轉二進位制)

概念

回溯演算法實際上一個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。許多複雜的,規模較大的問題都可以使用回溯法,有“通用解題方法”的美稱。

十進位制轉二進位制一般做法:

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; } }