2015-03-25 21 views
14

Neden y[i] < x[i] işlevi, x dizisi her zaman y değerinden her zaman daha yüksek olduğunda iki kat daha fazla zaman alır (örneğin, 1<x<2 ve 0<y<1). Ayrıca, 0.5<x<1.5 ve 0<y<1'u karşılaştırırken, yürütme süresi, 0<x<1 ve 0<y<1'un bulunduğu durumda yaklaşık 1,5x'dir. Bu, x ve y'nin uzun diziler olduğunu varsayar.Karşılaştırma işleçlerinin karmaşıklığı

Sizin için ne demek istediğimi anlamaya çalıştığınız kodu ekliyorum. Eğer (= 0 = 1 ofset denemek ve ofset) artırılması ve ofset değişkeni" azaltarak dizi x dengeleyebilir, kod dosyası Beta döngüler için yürütme zamanı depolar

kodudur:

.
#include <iostream> 
#include <array> 
#include <time.h> 
#include <math.h> 
using namespace std; 
#define MAX(x,y) ((x) > (y) ? (x) : (y)) 

int main() 
{ 
ofstream myfile_Beta; 
myfile_Beta.open ("Beta.txt"); 
clock_t begin_time = clock(); 
clock_t total_time; 
srand (time(NULL)); 

double offset =0.0; 

int m=0; 
for(int k=0;k<10000;k++) 
    { 
    m=1; 
    double M[75720],x[75720],y[75720]; 

    for (int i=0;i<75720;i++) 
    { 

     x[i]=+(rand()%1024)/1024.0* 1.0 + offset ; 
     y[i]=+(rand()%1024)/1024.0* 1.0 + 0.00; 
    } 
    begin_time = clock(); 
    for (int j=0;j<75720;j++) 
    { 
     M[j]=MAX(x[j],y[j]); 
    } 
    total_time =clock() - begin_time; 
    myfile_Beta <<float(total_time )<<" "<<endl; 
} 
myfile_Beta.close(); 
} 
+4

Kendi tanımlamak etmeyiniz 'MAX' kullanmak [' std :: max'] (http://en.cppreference.com/w/cpp/algorithm/ max) – Mgetz

+1

"rand()' işlevini çağırmak "ofset'inizi" komik yapar. – user3528438

+0

@Mgetz std :: max daha fazla zaman kullanır. – user304584

cevap

0

bir açıklaması vardır ilk şart geçerliyse az atlar vardır

ikinci açıklama temelde, şube Yüklemleme bakımından, nerede o olabilir 'tahminim' '<' sonucu ve ne olursa olsun bir sonraki kod geçerli olması sonuç, ve başarısızlık üzerinde muck, böylece aynı koşulu olduğunda nispeten çok fazla, derleyici daha sık doğru tahmin edebilir. Burada bu konuda daha fazla bilgi edinebilirsiniz: http://en.wikipedia.org/wiki/Branch_predication

+0

önceliği, hayır "a" – user3528438