統(tǒng)計

          留言簿(1)

          DB

          Others

          QA

          Tech Website

          閱讀排行榜

          評論排行榜

          【編程珠現】-算法設計技術

                  【編程珠璣】第一部分的基礎知識已經看完,比較有感觸的有以下幾點:
                      1)、數據決定程序結構:對不同的程序,選用最合適的數據結構,必要是可以借助數據庫來解決問題
                      2)、學會寫偽代碼:偽代碼是思想的結晶,拋開算法的細節(jié),抓住算法的本質思想。

                    第二部分是關于程序性能的講解。在算法設計技術章節(jié)講到了以下幾個重要的技術:
                      1)、保存狀態(tài),避免重要計算:這也是動態(tài)規(guī)劃所采用的思想,別浪費中間結果,它們很寶貴
                      2)、將信息預處理至數據結構中:保存中間結果的一種方法
                      3)、分治算法:算法課上第一個學習的算法,如:二分查找、Strassen矩陣乘法等等。核心思想在于把問題分解成簡單的子問題,然后對子
                                  問題進行合并,經常和遞歸一起使用
                      4)、掃描算法
                      5)、累積:通常用于求前i個值的和
                      6)、下界:許多問題要證明它的下界是多少


                      下面是習題14的解答思想:
                       描述:給定整數m、n和整數(實)數向量x[n],請找到出現使總和x[i]+……+x[i+m]最接近0的整數i( 0<=i<n-m)
                       解決思路:從i+1開始的長度為m+1的子向量等當前子向量減去x[i-1],再加上x[i+m]

                        
          int alg(int * x, int m , int n){
              
          if0 == n )
                  
          return 0;

              
          int i ;
              
          int start = 0;
              
          int subVal = 0;
              
          int sum = 0;

              
          for( i = 0; i <= m; i++){
                  sum 
          += x[i];
              }

              subVal 
          = abs(sum);
              
              
          for( i = 1; i < n-m; i++){
                  sum 
          -= x[i-1];
                  sum 
          += x[i+m];
                  cout 
          << "sum " << sum <<endl;
                  
          if(abs(sum) < subVal){  //如果subVal比當前sum絕對值大
                      start = i;
                      subVal 
          = abs(sum);
                      
                  }

              }

              
              cout 
          << "sum: " <<  sum << endl;
              cout 
          << "subVal: " << subVal << endl;
              
              
          return start;
          }

                   原題中的向量為實數,核心算法還是一樣的,只是浮點數比較的時候要注意下
                   有興趣的朋友歡迎一起討論 :)

          posted on 2011-01-14 11:20 XXXXXX 閱讀(278) 評論(0)  編輯  收藏 所屬分類: Algorithm

          主站蜘蛛池模板: 三门峡市| 黎城县| 中方县| 苏尼特右旗| 盐城市| 锡林浩特市| 汉沽区| 伊春市| 周宁县| 高州市| 定安县| 犍为县| 凤冈县| 南召县| 兴安县| 武陟县| 青田县| 恭城| 荣昌县| 微山县| 集贤县| 高清| 崇阳县| 太仆寺旗| 侯马市| 清水县| 绩溪县| 青海省| 巴塘县| 汾阳市| 淮北市| 香格里拉县| 龙海市| 清远市| 彰化市| 微博| 抚宁县| 四子王旗| 神农架林区| 城固县| 贡觉县|