-
Notifications
You must be signed in to change notification settings - Fork 42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BENCH] Bron-Kerbosch clique detection #157
Changes from 62 commits
3fe9e21
a629352
99f77cd
956eac3
3ec396d
3ba348d
432b6b4
97ccea7
3e55e23
286e9ce
419b663
2408835
7e459bf
6fc3af0
767a532
8ebb5f4
ffe4553
bb28f8c
ce5df25
1c82f04
1c644a0
a0fde77
2ae7d97
a3a3b31
c05cd27
b5db653
057ee77
9e92f3f
665a484
5dce08b
03200f7
f8cd4fb
21cde40
14f0b8d
7efd134
0bcad82
f96849a
57d3c47
c5ddba1
3c94ab6
19ea438
68c2c2b
55d3972
39487bd
da97d62
7a1ca3c
4a43bce
773a708
e0a2978
8441998
4e843a9
f3274c9
9ac7524
14ccc5a
27e6894
f7ce62d
6969839
7f19ab7
0f9ffe8
0fb11b1
116e1f5
ef490b8
7b42950
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,245 @@ | ||||||||||||||||||||||||||||||||||||||||||
#include <benchmark/benchmark.h> | ||||||||||||||||||||||||||||||||||||||||||
#include <graaflib/algorithm/clique_detection/bron_kerbosch.h> | ||||||||||||||||||||||||||||||||||||||||||
#include <graaflib/graph.h> | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
#include <random> | ||||||||||||||||||||||||||||||||||||||||||
#include <vector> | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
namespace { | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// Generating random number of vertices (1- 30) for a clique | ||||||||||||||||||||||||||||||||||||||||||
std::random_device dev; | ||||||||||||||||||||||||||||||||||||||||||
std::mt19937 rng(dev()); | ||||||||||||||||||||||||||||||||||||||||||
std::uniform_int_distribution<std::mt19937::result_type> random_clique_size(1, | ||||||||||||||||||||||||||||||||||||||||||
30); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
template <typename EDGE_T> | ||||||||||||||||||||||||||||||||||||||||||
[[nodiscard]] std::vector<graaf::vertex_id_t> create_vertices( | ||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, EDGE_T>& graph, size_t n) { | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::vertex_id_t> vertices{}; | ||||||||||||||||||||||||||||||||||||||||||
vertices.reserve(n); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < n; ++i) { | ||||||||||||||||||||||||||||||||||||||||||
vertices.push_back(graph.add_vertex(i)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
return vertices; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
template <typename EDGE_T> | ||||||||||||||||||||||||||||||||||||||||||
void add_clique(graaf::undirected_graph<int, EDGE_T>& graph, | ||||||||||||||||||||||||||||||||||||||||||
const std::vector<graaf::vertex_id_t>& vertices, | ||||||||||||||||||||||||||||||||||||||||||
size_t start_vertex, size_t clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
// We are in range of vector of vertices | ||||||||||||||||||||||||||||||||||||||||||
size_t end_vertex = std::min(start_vertex + clique_size, vertices.size()); | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::edge_id_t> clique{}; | ||||||||||||||||||||||||||||||||||||||||||
clique.reserve((clique_size * (clique_size - 1)) / 2); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// Constructing a clique | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{start_vertex}; i < end_vertex; ++i) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t j{i + 1}; j < end_vertex; ++j) { | ||||||||||||||||||||||||||||||||||||||||||
clique.emplace_back(vertices[i], vertices[j]); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto& edge_t : clique) { | ||||||||||||||||||||||||||||||||||||||||||
graph.add_edge(edge_t.first, edge_t.second, 1); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is the need of storing the edges in the vector
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh my bad, I overconfused myself. |
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} // namespace | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_two_vertices_cliques(benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If I understand the code correctly, we create a graph with a linear path of connected vertices: This was not immediately clear to me when looking at the benchmark name. What do you think about calling this something like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed, that definitely will be a better explanation of what code does. |
||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < number_of_edges; ++i) { | ||||||||||||||||||||||||||||||||||||||||||
graph.add_edge(vertices[i], vertices[i + 1], 1); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looking at the docs the to-be-benchmarked code should go into the body of this In order to make sure the compiler does not optimize the call to the algorithm away (since the result is unused) it would also be good to add
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same for the other benchmarks, maybe you could also take a look there There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Alright! |
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_dense_graph(benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < number_of_edges; ++i) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t j{i + 1}; j < number_of_edges; ++j) { | ||||||||||||||||||||||||||||||||||||||||||
if (i != j && !graph.has_edge(vertices[i], vertices[j])) | ||||||||||||||||||||||||||||||||||||||||||
graph.add_edge(vertices[i], vertices[j], 1); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looking at these for loops, would the condition in the for (size_t i{0}; i < number_of_edges; ++i) {
for (size_t j{i + 1}; j < number_of_edges; ++j) {
graph.add_edge(vertices[i], vertices[j], 1);
}
} Which in turn looks pretty similar to the add_clique(graph, vertices, vertices.front(), number_of_edges); There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ^^ Oh, how I mised that! Thanks for emphasizing this! |
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_graph_triangle_cliques(benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
size_t clique_size = 4; | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. My bad with naming, basically, it's a triangle with a dot inside (4 vertex clique). |
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < number_of_edges; i += clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::edge_id_t> clique{}; | ||||||||||||||||||||||||||||||||||||||||||
add_clique(graph, vertices, i, clique_size); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_graph_connected_triangle_cliques( | ||||||||||||||||||||||||||||||||||||||||||
benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
size_t clique_size = 4; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
// Connecting all cliques | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i + clique_size < number_of_edges; i += clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
graph.add_edge(vertices[i], vertices[i + clique_size], 1); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < number_of_edges; i += clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::edge_id_t> clique{}; | ||||||||||||||||||||||||||||||||||||||||||
add_clique(graph, vertices, i, clique_size); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_graph_large_cliques(benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
size_t clique_size = 25; | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could also do this in a follow-up, but looking at these parameters it looks like we can pull out the BENCHMARK(bron_kerbosh_connected_cliques)
->Ranges({{100, 10000}, {3, 100}}) // total number of edges, clique size
->Unit(benchmark::kMillisecond)
->Complexity(); There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you want I would like to add this in current PR! |
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < number_of_edges; i += clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::edge_id_t> clique{}; | ||||||||||||||||||||||||||||||||||||||||||
add_clique(graph, vertices, i, clique_size); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_graph_mixed_random_cliques(benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
size_t clique_size = 3; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i + clique_size < number_of_edges; i += clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::edge_id_t> clique{}; | ||||||||||||||||||||||||||||||||||||||||||
add_clique(graph, vertices, i, clique_size++); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
clique_size = random_clique_size(rng); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
static void bron_kerbosh_graph_connected_mixed_random_cliques( | ||||||||||||||||||||||||||||||||||||||||||
benchmark::State& state) { | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_edges{static_cast<size_t>(state.range(0))}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::undirected_graph<int, int> graph{}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// We create enough vertices to construct the requested number of edges | ||||||||||||||||||||||||||||||||||||||||||
const auto number_of_vertices{number_of_edges + 1}; | ||||||||||||||||||||||||||||||||||||||||||
const auto vertices{create_vertices(graph, number_of_vertices)}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
size_t clique_size = 3; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (auto _ : state) { | ||||||||||||||||||||||||||||||||||||||||||
// Connecting all cliques | ||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i < number_of_edges; ++i) { | ||||||||||||||||||||||||||||||||||||||||||
graph.add_edge(vertices[i], vertices[i + 1], 1); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
for (size_t i{0}; i + clique_size < number_of_edges; i += clique_size) { | ||||||||||||||||||||||||||||||||||||||||||
std::vector<graaf::edge_id_t> clique{}; | ||||||||||||||||||||||||||||||||||||||||||
add_clique(graph, vertices, i, clique_size++); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
clique_size = random_clique_size(rng); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
graaf::algorithm::bron_kerbosch(graph); | ||||||||||||||||||||||||||||||||||||||||||
state.SetComplexityN(state.range(0)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_two_vertices_cliques) | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 10000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); | ||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_dense_graph) /* large amount of vertices to process */ | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 1000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); | ||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_graph_triangle_cliques) | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 10000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); | ||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_graph_connected_triangle_cliques) | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 10000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); | ||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_graph_large_cliques) | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 10000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); | ||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_graph_mixed_random_cliques) | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 10000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); | ||||||||||||||||||||||||||||||||||||||||||
BENCHMARK(bron_kerbosh_graph_connected_mixed_random_cliques) | ||||||||||||||||||||||||||||||||||||||||||
->Range(100, 10000) | ||||||||||||||||||||||||||||||||||||||||||
->Unit(benchmark::kMillisecond) | ||||||||||||||||||||||||||||||||||||||||||
->Complexity(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am always a little hesitant adding such non deterministic benchmarks, as it makes comparing results difficult. It might still be nice to have since we use it to determine the runtime complexity as well, just something to be aware of.