<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C/Java/Python/Objective-C在OS X上的性能實驗

      前幾天看到一篇介紹python的文章:如何讓python變得更快——http://www.codeproject.com/Articles/522217/Howplustoplusmakepluspythonplusfaster,這篇文章勾起了我的好奇心,同樣的算法多種編程語言在Mac的OS X上跑會是個什么情況呢?

      于是寫了四種語言的斐波那契數列實現:C、Java、Python、Objective-C,而且都采用了效率最差耗時最長的遞歸實現,不使用其他數據結構或公式,這樣對比起來更容易一些,如果使用迭代方式的話,執行時間太短很難比較。

      第一輪測試不做任何優化,第二輪分別做一些編譯和環境的調優處理,然后再看一下結果。代碼如下:

      C語言,使用函數實現遞歸計算

      #include <stdio.h>
      
      long fib(int n){
          if (n < 2)
              return n;
          return fib(n - 1) + fib(n - 2);
      }
      
      int main() {
          printf( "fib= %ld", fib(40) );
          return 0;
      }

      Java,使用靜態方法實現遞歸計算

      public class fib {
      
          public static long jfib(int n ){
              if (n < 2)
                  return n;
              return jfib(n - 1) + jfib(n - 2);
          }
      
          public static void main(String[] args) {
              System.out.println( jfib( 40 ) );
          }
      }

      Python,使用函數實現遞歸計算

      def fib(n):
          if n < 2:
              return n
          return fib(n - 1) + fib(n - 2)
      
      print fib(40) 

      Objective-C,使用block實現遞歸計算

      #import <Foundation/Foundation.h>
      
      int main(int argc, const char * argv[])
      {
          @autoreleasepool {
              
              long (^__block fib)(long) = ^(long num){
                  if ( num < 2 )
                      return num;
                  return fib(num-1) + fib(num-2);
              };
              
              NSLog(@"Fib: %ld", fib(40) );
              
          }
          return 0;
      }

      基本的測試環境:

      C語言:i686-apple-darwin11-llvm-gcc-4.2

      Java:java version "1.6.0_37",HotSpot(TM) 64-Bit

      Python:Python 2.7.2 with GCC 4.2.1

      Pypy:PyPy 1.9.0 with GCC 4.2.1

      Objective-C:2.0 with LLVM 4.1

       

      使用time命令計算執行時間,例如time python fib.py

      直接編譯運行的結果還是比較讓人吃驚的:

      C:1 秒

      Java:0.63 秒

      Python:45.79 秒

      Objective-C:1.3 秒

       

      結果:Java > C > Objective-C > Python

      這個結果讓人感到,Java真的不慢,動態語言有點慢。

       

      第二輪測試,針對C程序,使用gcc -O進行優化編譯;針對Python,使用pypy替換原生的python環境,針對Objective-C,設置優化Level為Fastest,結果如下:
       
      C:0.35 秒
      Java:0.63 秒
      Python:4.96 秒
      Objective-C:1.04 秒
       
      結果:C > Java > Objective-C > Python
       
      這個結果告訴我們,C還是最快的,pypy對python的優化處理還是非常明顯的。 
       
      以上數據是在OS X平臺上的、性能比例放大的測試結果,在實際應用中,如果針對不同場景采用了正確的算法,差距就不會有這么大,比如我們用迭代方式改寫一下python的實現,如下:
       
      def fib(n):
          if n < 2:
              return n
          a1 = a2 = a3 = 1
          while n>2:
              n -= 1
              a3=a1+a2
              a1=a2
              a2=a3
      
          return a3
      
      print fib(40)
       
      這時無論使用Python編譯執行還是Pypy執行,基本都是0.02秒左右,沒有太大差別。以上代碼的執行結果是102334155,有興趣的可以在自己的機器上試試。
      聲明:
      1、以上代碼僅供參考娛樂,實際應用中如果使用斐波那契數列,絕對不要使用遞歸調用的方式,迭代法應該是不錯的選擇。
      2、數據量加大可能會有不同的結果,有興趣的可以嘗試下。
       
      實驗完成,希望對大家有參考。

       

      posted @ 2013-01-10 21:19  池建強  閱讀(7997)  評論(11)    收藏  舉報
      主站蜘蛛池模板: 久久老熟女一区二区蜜臀| 麻豆精产国品一二三产| 激情国产av做激情国产爱 | 亚洲中文字字幕精品乱码| 国产精品SM捆绑调教视频| av永久免费网站在线观看| 2020国产欧洲精品网站| 洛川县| 国产av一区二区午夜福利| 少妇爽到呻吟的视频| 爆乳日韩尤物无码一区| 1000部拍拍拍18勿入免费视频下载| 国产一区二区三区自拍视频| 在线中文一区字幕对白| 日本熟妇色xxxxx| 在线观看热码亚洲av每日更新| 欧美成人性色一区欧美成人性色区| 老男人久久青草av高清| 亚洲av无码牛牛影视在线二区| 亚洲乱码一二三四区国产| 乌拉特前旗| 亚洲一区二区精品极品| 色哟哟www网站入口成人学校| 老司机精品成人无码av| 综合亚洲网| 黑人大战中国av女叫惨了| 亚洲精品一二三伦理中文| 在线高清免费不卡全码| 日韩欧美亚洲综合久久| 国产成人精品久久性色av| 国产精品一亚洲av日韩| 久久亚洲国产品一区二区| 中文字幕在线日韩| 精品少妇无码一区二区三批| 内射视频福利在线观看| 91福利国产成人精品导航| 国产高清在线精品一区二区三区| 男女扒开双腿猛进入爽爽免费看| AV人摸人人人澡人人超碰| 九九久久精品国产| 18禁亚洲一区二区三区|