爱嘉牛LA

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

  欧几里得距离

  欧几里得距离定义: 欧几里得距离( Euclidean distance)也称欧式距离,它是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。
 
  在二维和三维空间中的欧式距离的就是两点之间的距离,二维的公式是
 
  d = sqrt((x1-x2)^+(y1-y2)^)
 
  三维的公式是
 
  d=sqrt((x1-x2)^+(y1-y2)^+(z1-z2)^)
 
  推广到n维空间,欧式距离的公式是
 
  d=sqrt( ∑(xi1-xi2)^ ) 这里i=1,2..n
 
  xi1表示第一个点的第i维坐标,xi2表示第二个点的第i维坐标
 
  n维欧氏空间是一个点集,它的每个点可以表示为(x(1),x(2),...x(n)),其中x(i)(i=1,2...n)是实数,称为x的第i个坐标,
     两个点x和y=(y(1),y(2)...y(n))之间的距离d(x,y)定义为上面的公式.
 
  欧氏距离看作信号的相似程度。 距离越近就越相似,就越容易相互干扰,误码率就越高。
    
     下面是c++代码实现:
View Code
#include<iostream>
#include<cmath>
using namespace std;
                       //calculate the Euclid's distant
///////////////////////////////////////////////////////////////////////////
class Distance{
    public:
      Distance(int m,double array1[],double array2[]);
      void distance(double a[],double b[]);//calculate the distance
      void set(double array1[],double array2[]);
      double get(){    
          return Result;
      }
   ~Distance(){}
   private:
      int n;
      double* a;//declare two objects
      double* b;
      double square;
      double Result;// The result of Euclid's distanst 
};
Distance::Distance(int m,double array1[],double array2[]){
    n=m;
    set(array1,array2);
    distance(a,b);
}
void Distance::set(double array1[],double array2[]){
    a=array1;
    b=array2;
}
void Distance::distance(double a[],double b[]){
    square=0;
    for(int i=0;i<n;i++){
        square+=(a[i]-b[i])*(a[i]-b[i]);
    }
    Result=sqrt(square/n);
}

/////////////////////////////////////////////////////////////////////// 
//the main function
int main(){
    int n;
    cout<<"Please input the dimensions n:";
    cin>>n; 
    double a[n];
    double b[n];
    cout<<"Input the "<<n<<" number for the dimendions of a1:";
       for(int i=0;i<n;i++)
           cin>>a[i];
    cout<<"Input the "<<n<<" number for the dimendions of b1:";
       for(int i=0;i<n;i++)
          cin>>b[i];
    Distance distance(n,a,b);
    cout<<"The distance is:"<<distance.get()<<endl;
    return 0;
}

 

   
   

 

posted on 2012-05-03 13:57  爱嘉牛LA  阅读(8238)  评论(2编辑  收藏  举报