Re: BinarySearch

From: Rene Brun <Rene.Brun_at_cern.ch>
Date: Thu, 23 Jul 2009 13:07:38 +0200


Are you sure that your array is sorted before calling BinarySearch? If this is not the problem, could you post the strict minimum to investigate the problem, ie your data file?

Rene Brun

Roger Mason wrote:
> Hello,
>
> I'd like to use TMath::BinarySearch to find the index of a value in an
> array. I have the following code:
>
> #include <TGraph.h>
> #include <TMath.h>
> #include <iostream>
>
> void bs () {
> // This is the whole spectrum
> TGraph* file1 = new TGraph("file1_2col_np.dat");
> Long64_t N = file1->GetN();
> Double_t* x = file1->GetX();
> Double_t* y = file1->GetY();
> Double_t xmax = TMath::MaxElement(N,x);
> Double_t xmin = TMath::MinElement(N,x);
> printf("Minimum wavenumber = %f\n",xmin);
> printf("Maximum wavenumber = %f\n",xmax);
>
> Double_t target;
>
> target = xmin;
> Long64_t l = TMath::BinarySearch(N,x,target);
> cout << target << " is at " << l << endl;
>
> target = 17000.0;
> l = TMath::BinarySearch(N,x,target);
> cout << target << " is at " << l << endl;
>
> for ( Long64_t i = 0; i < N; i++ ) {
> if ( x[i] == target )
> cout << "(Brute force) " << target << " is at " << i << endl;
> }
>
> }
>
> The output is as follows:
>
> minnie 090706 $ root -b -q bs.C
>
> <snip>
>
> ROOT 5.20/00 (trunk_at_24524, Oct 01 2008, 15:00:00 on linux)
>
> <snip>
>
> root [0]
> Processing bs.C...
> Minimum wavenumber = 13890.000000
> Maximum wavenumber = 19440.000000
> 13890 is at -1
> 17000 is at 5550
> (Brute force) 17000 is at 2440
>
> Will someone please tell me how to make BinarySearch work?
>
> Thanks,
> Roger
>
>
Received on Thu Jul 23 2009 - 13:08:06 CEST

This archive was generated by hypermail 2.2.0 : Thu Jul 23 2009 - 17:50:01 CEST