close

一、目的:計算機科學中常見的問題是將問題依照其特性進行分類,因此這個問題主要的目的是如何依照

            特定的演算法將所有未知的輸入資料進行分類。(連結UVa online原文題庫)

 

二、問題說明:

     考慮下列的演算法:

     100.jpg

    當輸入整數值22時則會依序輸出如右的數值序例:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

    由於該演算法是假設對於輸入任何的整數會結束(n=1), 因此必須依照上述的演算法對於所有輸入的整數

    (0~1,000,000)進行驗證。驗證的方式為給一整數n 則可以決定輸出數值的數量,即是cycle-length of n.

    因此當輸入兩個數值時,程式必須輸出兩個數值區間的最大cycle-length值。(EX:n=22,cycle-length=16)

    EX: Sample Input             Sample Output   

             1 10              ==>    1 10 20

             100 200                   100 200 125

             201 210                   201 210 89

             900 1000      ==>    900 1000 174

 

三、輸入與輸出的規則:

     所有的輸入值都是由兩個整數值成組一筆測試資料,測試時將會依序輸入多筆的測試資料且所有整數

    的區間值為0< n <1,000,000。輸入結果時必須同時輸出每筆測試資料的數值並且輸出其區間中最

    大的cycle-length。

 

四、演算法說明:

      在不考慮執行速度的情況下,該問題可以說非常的簡單;因此如何加快執行速度是本篇主要討論的方向:

    4-1: 使用位移運算和位元運算來取代算術運算 ( / ,%  =>  >>, & ). 

    4-2: 當n為奇數時進行3n+1的運算後必定為偶數,因此可以直接將該值除2來減少判斷的次數。

    4-3: 使用Lookup-Table的方式來儲存已經計算過整數的cycle-length,當其他未計算的整數在計算過程

            中遇見LookupTable中已計算過的整數時,即可直接將目前的cycle-length加上LookupTable

            中的cycle-length;藉此來減少重覆計算,提高執行速度。

           (TableSize= 20000 * sizeof(unsigned short) )

 

Run time of UVa online web : 0.080  (Table Size = 20000)

Run time of UVa online web : 0.128  (Table Size = 10000)

Run time of UVa online web : 0.512  (No use table size)

Download : UVa100_The3n+1Problem.tar.gz

Result:

       100.JPG 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 yunjuihuang 的頭像
    yunjuihuang

    瑞の資訊備忘錄

    yunjuihuang 發表在 痞客邦 留言(0) 人氣()