Пример #1
0
	// bucket sort, but no need sort, just keep min max of every interval
	int maximumGap(vector<int>& nums) {
		int n = nums.size();
		if (n <= 1) return 0;
		auto lh = minmax_element(nums.begin(), nums.end());
		int l = *lh.first, h = *lh.second;
		int gap = max(1, (h-l) / (n-1));
		int m = (h-l) / gap + 1;
		vector<int> bucket_min(m, INT_MAX);
		vector<int> bucket_max(m, INT_MIN);
		for (auto num : nums) {
			int k = (num-l) / gap;
			bucket_min[k] = min(bucket_min[k], num);
			bucket_max[k] = max(bucket_max[k], num);
		}
		int ans(bucket_max[0] - bucket_min[0]);
		int i = 0;
		while (i < m) {
			int j = i+1;
			while (j < m && bucket_min[j] == INT_MAX && bucket_max[j] == INT_MIN) ++j;
			if (j == m) break;
			ans = max(ans, bucket_min[j] - bucket_max[i]);
			i = j;
		}
		return ans;
	}
Пример #2
0
// visualise data distribution
template <typename T> Mat plotGraph(vector<T>& vals, int YRange[2], float best, float second_best)
{

    auto it = minmax_element(vals.begin(), vals.end());
    float scale = 1./ceil(*it.second - *it.first); 
    float bias = *it.first;

    int rows = YRange[1] - YRange[0] + 1;
    Mat image = Mat::zeros( rows+20, vals.size(), CV_8UC3 );
    image.setTo(0);
    for (int i = 0; i < (int)vals.size()-1; i++)
    {
        line(image, Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]),
             Point(i+1, rows - 1 - (vals[i+1] - bias)*scale*YRange[1]), Scalar(255, 0, 0), 1);

        if (vals[i]==best)
          circle( image, Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]), 2, Scalar(0, 0, 255));
        else if (vals[i]==second_best)
          circle( image, Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]), 2, Scalar(0, 255, 0));
        else
          circle( image, Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]), 1, Scalar(0, 255, 255));
    }
    resize( image, image, Size( image.cols*2, image.rows*2 ) );

    return image;
}
Пример #3
0
		void RunMinMaxElementCallback()
		{
			{  // seq
				MinMaxAlgoTest<_IterCat> _Alg(MinMax, true);
				_Alg.set_pair_result(minmax_element(seq, _Alg.begin_in(), _Alg.end_in(), _Alg.callback()));
			}

			{  //par
				MinMaxAlgoTest<_IterCat> _Alg(MinMax, true);
				_Alg.set_pair_result(minmax_element(par, _Alg.begin_in(), _Alg.end_in(), _Alg.callback()));
			}

			{  //vec
				MinMaxAlgoTest<_IterCat> _Alg(MinMax, true);
				_Alg.set_pair_result(minmax_element(vec, _Alg.begin_in(), _Alg.end_in(), _Alg.callback()));
			}
		}
Пример #4
0
void algorithms_min_max()
{
  min();
  max();
  minmax();
  min_element();
  max_element();
  minmax_element();
}
Пример #5
0
void Histogram::normalize()
{
    auto result = minmax_element(buskets.get(),buskets.get()+size);
    double floor = *(result.second)-*(result.first);
    if (floor<0.0000001)
        return;
    for (int i=0;i<size;i++)
    {
        buskets[i] = (buskets[i]-*(result.first))/floor;
    }
}
Пример #6
0
void CVImage::normalize(double newMin, double newMax)
{
    auto minmax = minmax_element(&data[0], &data[height * width]);
    double oldMin = *minmax.first;
    double oldMax = *minmax.second;


    for_each(&data[0], &data[height * width], [&] (double &value) {
        value = newMin + (newMax - newMin)*(value - oldMin)/(oldMax - oldMin);
     });

}
Пример #7
0
 typename util::detail::algorithm_result<
     ExPolicy,
     hpx::util::tagged_pair<
         tag::min(typename traits::range_traits<Rng>::iterator_type),
         tag::max(typename traits::range_traits<Rng>::iterator_type)>
 >::type
 minmax_element(ExPolicy && policy, Rng && rng, F && f = F(),
     Proj && proj = Proj())
 {
     return minmax_element(std::forward<ExPolicy>(policy),
         boost::begin(rng), boost::end(rng),
         std::forward<F>(f), std::forward<Proj>(proj));
 }
Пример #8
0
TileHolder::TileHolder(const vector<string> &files, const vector<float> &xs, const vector<float> &ys, const Size &imSz, const Size &tileSz) :
		tileSz(tileSz) {
	assert(files.size() == xs.size() && xs.size() == ys.size());
//	for (int i = 0; i < files.size(); i++) {
//		printf("%s %f %f\n", files[i].c_str(), xs[i], ys[i]);
//	}

	auto xMinMax = minmax_element(xs.begin(), xs.end());
	float xMin = *(xMinMax.first), xMax = *(xMinMax.second);
	auto yMinMax = minmax_element(ys.begin(), ys.end());
	float yMin = *(yMinMax.first), yMax = *(yMinMax.second);

	tl = Point2f(xMin, yMin);
//	printf("abs tl: %f %f\n", tl.x, tl.y);

	szInTiles.width = (int)ceil((xMax + imSz.width - tl.x) / tileSz.width);
	szInTiles.height = (int)ceil((yMax + imSz.height - tl.y) / tileSz.height);
//	printf("size in tiles: %u %u\n", szInTiles.width, szInTiles.height);

	transBins.resize(szInTiles.area());

	for (int i = 0; i < files.size(); i++) {
		Point2f pos(xs[i], ys[i]);
		ImData dat = {files[i], pos};
		int exhuastW = 0;
		while (exhuastW <= imSz.width)
		{
			int exhuastH = 0;
			while (exhuastH <= imSz.height)
			{
				getBinFromPos(Point2f(xs[i] + exhuastW, ys[i] + exhuastH)).insert(dat);
				exhuastH=exhuastH + tileSz.height;
			}
			exhuastW=exhuastW + tileSz.width;
		}
	}
	getWeightMat(imSz, weightMat);
}
	vector<vector<double>> normalizeVals(vector<vector<double>>& values)
	{
		vector<vector<double>> values_t = transpose(values);

		for (unsigned i = 0; i < values_t.size(); i++)
		{
			vector<double>& v = values_t[i];
			auto result = minmax_element(v.begin(), v.end());
			auto minVal = v[result.first - v.begin()];
			auto maxVal = v[result.second - v.begin()];

			for (unsigned j = 0; j < values.size(); j++)
			{
				values_t[i][j] = (values_t[i][j] - minVal) / (maxVal - minVal);
			}
		}

		return transpose(values_t);
	}
Пример #10
0
 inline std::pair<ForwardIter,ForwardIter>
 first_min_first_max_element(ForwardIter first, ForwardIter last,
                             BinaryPredicate comp)
 {
   return minmax_element(first, last, comp);
 }
Пример #11
0
 inline std::pair<ForwardIter,ForwardIter>
 first_min_first_max_element(ForwardIter first, ForwardIter last)
 {
   return minmax_element(first, last);
 }
Пример #12
0
const DBSCAN::DistanceMatrix DBSCAN::calc_dist_matrix( const DBSCAN::ClusterData& C, const DBSCAN::FeaturesWeights& W )
{
    DBSCAN::ClusterData cl_d = C;

    omp_set_dynamic( 0 );
    omp_set_num_threads( m_num_threads );
#pragma omp parallel for
    for ( size_t i = 0; i < cl_d.size2(); ++i ) {
        ublas::matrix_column< DBSCAN::ClusterData > col( cl_d, i );

        const auto r = minmax_element( col.begin(), col.end() );

        double data_min = *r.first;
        double data_range = *r.second - *r.first;

        if ( data_range == 0.0 ) {
            data_range = 1.0;
        }

        const double scale = 1 / data_range;
        const double min = -1.0 * data_min * scale;

        col *= scale;
        col.plus_assign( ublas::scalar_vector< typename ublas::matrix_column< DBSCAN::ClusterData >::value_type >( col.size(), min ) );
    }

    // rows x rows
    DBSCAN::DistanceMatrix d_m( cl_d.size1(), cl_d.size1() );
    ublas::vector< double > d_max( cl_d.size1() );
    ublas::vector< double > d_min( cl_d.size1() );

    omp_set_dynamic( 0 );
    omp_set_num_threads( m_num_threads );
#pragma omp parallel for
    for ( size_t i = 0; i < cl_d.size1(); ++i ) {
        for ( size_t j = i; j < cl_d.size1(); ++j ) {
            d_m( i, j ) = 0.0;

            if ( i != j ) {
                ublas::matrix_row< DBSCAN::ClusterData > U( cl_d, i );
                ublas::matrix_row< DBSCAN::ClusterData > V( cl_d, j );

                int k = 0;
                for ( const auto e : ( U - V ) ) {
                    d_m( i, j ) += fabs( e ) * W[k++];
                }

                d_m( j, i ) = d_m( i, j );
            }
        }

        const auto cur_row = ublas::matrix_row< DBSCAN::DistanceMatrix >( d_m, i );
        const auto mm = minmax_element( cur_row.begin(), cur_row.end() );

        d_max( i ) = *mm.second;
        d_min( i ) = *mm.first;
    }

    m_dmin = *( min_element( d_min.begin(), d_min.end() ) );
    m_dmax = *( max_element( d_max.begin(), d_max.end() ) );

    m_eps = ( m_dmax - m_dmin ) * m_eps + m_dmin;

    return d_m;
}
 value_type min_element(P pr) const
 {
     return minmax_element(std::not2(pr));
 }
 /// Returns the value of the minimum elements in the range
 value_type min_element() const
 {
     return minmax_element(std::greater<value_type>());
 }
 value_type max_element(P pr) const
 {
     return minmax_element(pr);
 }
 /// Returns the value of the maximum elements in the range
 value_type max_element() const
 {
     return minmax_element(std::less<value_type>());
 }