Liczenie trójkątów na ogólnych wykresach można trywialnie wykonać w czasie i myślę, że znacznie szybsze wykonanie jest trudne (mile widziane referencje). Co z grafami płaskimi? Poniższa prosta procedura pokazuje, że można tego dokonać w czasie O ( n log n ) . Moje pytanie jest dwojakie:
- Jakie jest odniesienie do tej procedury?
- Czy czas może być liniowy?
Z algorytmicznego dowodu twierdzenia Liptona-Tarjana o separatorze planarnym możemy, w czasie liniowym w wielkości wykresu, znaleźć podział wierzchołków wykresu na trzy zestawy tak że nie ma żadnych krawędzi z jednym punktem końcowym w A i drugi w B , S ma rozmiar ograniczony przez O ( √i obaA,Bmają rozmiary górne ograniczone przez 2 liczby wierzchołków. Należy zauważyć, że każdy trójkąt wykres leży całkowicie wewnątrz alboA,albo całkowicie wewnątrzB,lub stosuje się co najmniej jeden wierzchołekSz dwoma innymi wierzchołkiA∪Slub obu z nichB∪S. Wystarczy zatem zliczyć liczbę trójkątów na wykresie naSi sąsiadówSnaA(i podobnie dlaB). Zauważ, żeSi jego-Asąsiadują indukująpłaski wykresk-routera (wspomniany wykres jest podgraphem płaskiego wykresu o średnicy4). Tak więc zliczanie liczby trójkątów na takim wykresie można wykonać bezpośrednio przez programowanie dynamiczne lub przez zastosowanie twierdzenia Courcelle (wiem na pewno, że taka wersja zliczania istnieje w świecie Logspace autorstwa Elberfelda i in. I domyślam się, że ona również istnieje w liniowym świecie czasu), ponieważ tworzenie niekierowanego trójkąta jest właściwością i ponieważ rozkład drzewa o ograniczonej szerokości jest łatwy do uzyskania z osadzonego płaskiego wykresu k- routera.
W ten sposób zredukowaliśmy problem do pary problemów, z których każdy jest stałą częścią mniejszą kosztem liniowej procedury czasowej.
Zauważ, że procedurę można rozszerzyć, aby znaleźć liczbę wystąpień dowolnego połączonego grafu wewnątrz wykresu wejściowego w czasie .