Files
@ ef14718be3e4
Branch filter:
Location: AENC/switchchain/cpp/bruteforce_triangles.cpp - annotation
ef14718be3e4
2.1 KiB
text/x-c++src
Update CCM time evol plots
b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d 1bdb42fca62f b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d 1bdb42fca62f b9691ef87e6d b9691ef87e6d 1bdb42fca62f b9691ef87e6d b9691ef87e6d 1bdb42fca62f b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d b9691ef87e6d 1bdb42fca62f b9691ef87e6d | #include "exports.hpp"
#include "graph.hpp"
#include <iostream>
#include <map>
int main() {
// Bruteforce over all graphs of n nodes
constexpr int n = 8;
constexpr int E = n * (n - 1) / 2;
std::map<DegreeSequence, unsigned int> optimalTriangles;
std::cout << "Iterating over all graphs with " << n << " vertices." << std::endl;
Graph g;
for (int edgeMask = 0; edgeMask < (1 << E); ++edgeMask) {
g.reset(n);
int mask = edgeMask;
for (auto i = 0u; i < n; ++i) {
for (auto j = i + 1; j < n; ++j) {
if (mask & 1) {
g.addEdge({i, j});
}
mask >>= 1;
}
}
auto triangles = g.countTriangles();
auto ds = g.getDegreeSequence();
std::sort(ds.begin(), ds.end());
auto iter = optimalTriangles.find(ds);
if (iter != optimalTriangles.end()) {
if (iter->second < triangles)
iter->second = triangles;
} else {
optimalTriangles[ds] = triangles;
}
}
std::cout << "Comparing with Erdos-Gallai triangles." << std::endl;
int total = 0;
int unequal = 0;
int differenceSum = 0;
for (auto &keyvalue : optimalTriangles) {
auto ds = keyvalue.first;
auto optimalTris = keyvalue.second;
g.createFromDegreeSequence(ds);
auto EGtris = g.countTriangles();
if (EGtris < optimalTris) {
int difference = optimalTris - EGtris;
std::cout << "Erdos-Gallai triangles: " << EGtris
<< "; Optimal triangles: " << optimalTris
<< "; Difference: " << difference
<< "; ds = " << ds << std::endl;
unequal++;
differenceSum += difference;
}
total++;
}
std::cout << "Done." << std::endl;
std::cout << unequal << " out of " << total << " degree sequences gave non-optimal triangles.\n";
std::cout << "Average difference of those: " << float(differenceSum) / float(unequal) << std::endl;
}
|