function KargerMinCut(Graph G): while G has more than 2 vertices: randomly select an edge (u, v) merge vertices u and v into a single vertex remove self-loops return the number of edges between the remaining two vertices
import random
from copy import deepcopy
def karger_min_cut(graph):
"""
Karger-algoritmus a minimális vágás meghatározására.
Args:
graph: A gráf szomszédsági listaként.
Returns:
A minimális vágás értéke.
"""
# Mély másolat a gráf módosítása elkerülése érdekében
graph = deepcopy(graph)
while len(graph) > 2:
# Véletlenszerű él kiválasztása
u = random.choice(list(graph.keys()))
v = random.choice(graph)
# Csúcsok összevonása
graph.extend(graph)
for vertex in graph:
graph = ]
# Önhurok eltávolítása
graph = if x != u]
del graph
# A minimális vágás a megmaradt két csúcs közötti élek száma
return len(next(iter(graph.values())))
# Példa gráf szomszédsági listában
graph = {
1: ,
2: ,
3: ,
4:
}
# Több futtatás a legjobb eredményért
min_cut = float('inf')
for _ in range(100):
result = karger_min_cut(graph)
if result < min_cut:
min_cut = result
print("Minimális vágás:", min_cut)
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
// Gráf szomszédsági lista reprezentáció
using Graph = unordered_map<int, vector<int>>;
int kargerMinCut(Graph graph) {
while (graph.size() > 2) {
// Véletlenszerű él kiválasztása
int u = rand() % graph.size();
auto it = graph.begin();
advance(it, u);
int vertex_u = it->first;
int v_index = rand() % graph.size();
int vertex_v = graph;
// Csúcsok összevonása
graph.insert(graph.end(), graph.begin(), graph.end());
for (int neighbor : graph) {
auto& edges = graph;
replace(edges.begin(), edges.end(), vertex_v, vertex_u);
}
// Önhurok eltávolítása
auto& edges = graph;
edges.erase(remove(edges.begin(), edges.end(), vertex_u), edges.end());
// Eltávolítjuk a vertex_v-t
graph.erase(vertex_v);
}
// A megmaradt két csúcs közötti élek száma
return graph.begin()->second.size();
}
int main() {
srand(time(0));
// Példa gráf szomszédsági listában
Graph graph = {
{1, {2, 3, 4}},
{2, {1, 3, 4}},
{3, {1, 2, 4}},
{4, {1, 2, 3}}
};
int min_cut = INT_MAX;
for (int i = 0; i < 100; i++) {
Graph temp_graph = graph;
min_cut = min(min_cut, kargerMinCut(temp_graph));
}
cout << "Minimális vágás: " << min_cut << endl;
return 0;
}
A Karger-algoritmus hatékony módszer a minimális vágás problémájának megoldására. Bár véletlenszerűségen alapul, többszörös futtatással növelhető az eredmény megbízhatósága. Pythonban és C++-ban egyaránt egyszerűen implementálható, és számos hálózati és gráfprobléma esetén hasznos.