LINUX.ORG.RU

История изменений

Исправление dataman, (текущая версия) :

Мой ответ O(N). Ответ интервьюера O(N*N)

А что «думает» nanobench?

#define ANKERL_NANOBENCH_IMPLEMENT

#include <iostream>
#include <vector>
#include "nanobench.h"

int main() {

    ankerl::nanobench::Bench bench;

    std::vector<int> a;

    for (auto setSize : {10U, 20U, 50U, 100U, 200U, 500U, 1000U}) {
	a.resize(setSize);
	std::iota(a.begin(), a.end(), 0);

	bench.complexityN(setSize).minEpochIterations(10000).run("vector erase", [&] {
	    for(auto it = a.begin(); it != a.end();)
	    {
		if (*it % 2)
		{
		    it = a.erase(it);
		}
		else
		{
		    ++it;
		}
	    }
	    ankerl::nanobench::doNotOptimizeAway(a);
        });

    }
    std::cout << bench.complexityBigO() << std::endl;
}
complexityNns/opop/serr%totalbenchmark
10109.499,133,388.192.9%0.01vector erase
20178.885,590,452.071.2%0.02vector erase
50364.272,745,215.413.2%0.04vector erase
100676.741,477,672.731.4%0.08vector erase
2001,300.63768,855.510.2%0.16vector erase
5003,217.13310,835.770.6%0.39vector erase
1,0006,371.71156,943.720.2%0.76vector erase
coefficienterr%complexity
6.3936793e-092.1%O(n)
6.5817043e-1012.0%O(n log n)
6.7992260e-1243.7%O(n^2)
6.6801693e-1561.1%O(n^3)
3.1984146e-0792.1%O(log n)
1.7455504e-06122.4%O(1)

И Оскар отправляется 6.3936793e-09 2.1% O(n).

Исходная версия dataman, :

Мой ответ O(N). Ответ интервьюера O(N*N)

А что «думает» nanobench?

#define ANKERL_NANOBENCH_IMPLEMENT

#include <iostream>
#include <vector>
#include "nanobench.h"

int main() {

    ankerl::nanobench::Bench bench;

    std::vector<int> a;

    for (auto setSize : {10U, 20U, 50U, 100U, 200U, 500U, 1000U}) {
	a.resize(setSize);
	std::iota(a.begin(), a.end(), 0);

	bench.complexityN(setSize).minEpochIterations(10000).run("vector erase", [&] {
	    for(auto it = a.begin(); it != a.end();)
	    {
		if (*it % 2)
		{
		    it = a.erase(it);
		}
		else
		{
		    ++it;
		}
	    }
	    ankerl::nanobench::doNotOptimizeAway(a);
        });

    }
    std::cout << bench.complexityBigO() << std::endl;
}
complexityNns/opop/serr%totalbenchmark
10109.499,133,388.192.9%0.01vector erase
20178.885,590,452.071.2%0.02vector erase
50364.272,745,215.413.2%0.04vector erase
100676.741,477,672.731.4%0.08vector erase
2001,300.63768,855.510.2%0.16vector erase
5003,217.13310,835.770.6%0.39vector erase
1,0006,371.71156,943.720.2%0.76vector erase
coefficienterr%complexity
6.3936793e-092.1%O(n)
6.5817043e-1012.0%O(n log n)
6.7992260e-1243.7%O(n^2)
6.6801693e-1561.1%O(n^3)
3.1984146e-0792.1%O(log n)
1.7455504e-06122.4%O(1)

Победитель – 6.3936793e-09 2.1% O(n).