digitcrusher / algorytmy

zbiór bardzo fajnych algorytmów

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

digitcrusher/algorytmy

Metodologia

  • Nie ma jednej implementacji algorytmu zaspokojającej wszystkie przypadki użycia, więc algorytmy powinny być proste do skopiowania, wklejenia do własnego kodu i zmodyfikowania w ważnych punktach ich działania.

  • Wszystkie algorytmy w tej bibliotece powinny być możliwie niezależnymi od siebie kawałkami kodu, wymagać jak najmniej kodu do samodzielnego funkcjonowania i mieć jak najprostszy interfejs.

  • Kod ma być czytelny, krótki, bez mikrooptymalizacji.

  • Asserty powinny sprawdzać warunki dotyczące wejścia, które nie mogą być wykryte na inne sposoby (np. przez sygnał naruszenia ochrony pamięci lub tryb debugowania w glibc++).

Lista zadań

Algorytmy

  • matematyka
    • NWD, NWW
    • mnożenie i potęgowanie modularne
    • rozszerzony algorytm Euklidesa
    • odwrotność modularna
    • liniowe równania diofantyczne
    • chińskie twierdzenie o resztach
    • logarytm dyskretny
    • sito liczb pierwszych - Eratostenes, Euler
    • test pierwszości - z sita, Miller-Rabin
    • rozkład na czynniki pierwsze - z sita, rho Pollarda
    • funkcja φ Eulera
    • liczba i suma dzielników
    • spamiętywana silnia
    • symbol Newtona
    • różne wzorki kombinatoryczne
    • FFT
    • modularne inty
    • NTT
    • rozszerzony binarny algorytm Euklidesa
    • funkcje tworzące
  • grafy
    • skojarzenia w grafie dwudzielnym - Hopcroft-Karp
    • przeszukiwanie grafu - BFS, DFS (w tym funkcja low)
    • sortowanie topologiczne - Kahn, z DFS
    • silnie spójne składowe - Kosaraju
    • dwu-kolorowanie grafu
    • mosty i punkty artykulacji
    • generator grafów losowych
    • minimalne drzewo rozpinające - Kruskal, Prim
    • najkrótsze ścieżki
      • dla DAGów, Dijkstra, Dial, Bellman-Ford, SPFA, Floyd-Warshall
      • A*, Johnson
    • binary lifting
    • najniższy wspólny przodek - z binary liftingu, z RMQ
    • heavy-light decomposition
    • chain decomposition
    • centroid decomposition
    • 2-SAT
    • transformacje drzew binarnych
    • znajdywanie cykli w grafie
    • skojarzenia
    • problem komiwojażera - z DP, z branch-and-bound
    • problem skoczka szachowego
    • liczba ścieżek prostych w grafie
    • dwuspójne składowe
    • ścieżka i cykl Eulera
    • algorytm Rémy'ego
  • struktury danych
    • drzewo przedziałowe - rekurencyjne, iteratywne
    • struktura zbiorów rozłącznych
    • sparse table
    • stos i kolejka minimum/monotoniczna
    • sumy prefiksowe
    • drzewo Fenwicka
    • skompresowane drzewo trie
    • sumy prefiksowe 2D
    • big inty
    • ułamki
    • modularne ułamki
    • treap (drzewiec)
    • ciągi
    • dynamiczne drzewo AABB
    • leniwe drzewo przedziałowe
    • maski bitowe
    • glibc pbds
    • permutacje
    • fibonacci heap
    • disjoint sparse table
    • drzewo Li Chao
    • drzewo przedziałowe 2D
    • drzewo Fenwicka 2D
    • sparse table 2D
  • algorytmy tekstowe i ciągi
    • najdłuższy wspólny podciąg - z DP, z dziel i zwyciężaj
    • haszowanie w okienku
    • hasze prefiksowe
    • wyszukiwanie wzorca w tekście
      • Rabin-Karp
      • KMP
    • tablica sufiksowa
    • najdłuższy rosnący podciąg
    • funkcja prefiksowa - KMP
    • algorytm Manachera
    • KMR
  • geometria
    • convex hull trick
    • figury geometryczne
      • punkt, odcinek
      • koło, trójkąt, wielokąt
    • triangulacja wielokątów
    • otoczka wypukła - Graham's scan
    • przecięcia i różnice prostokątów
    • euklidesowe minimalne drzewo spinające
  • inne
    • algorytm Mo
    • liczba unikatowych elementów na przedziałach przy użyciu drzewa przedziałowego
    • znajdź jedną liczbe w ciągu par liczb i podobne problemy
    • Quickselect
    • algorytm magicznych piątek
    • Lazyselect
  • reszta algorytmów

Notatki i materiały

  • kwadraty łacińskie
  • sztuczki i triki
    • kompresja wartości i współrzędnych
  • digit dp
  • meet in the middle
  • wszystko

Inne

  • moja templatka do rozwiązań
  • pragmy
  • testerka w kodzie
  • szybkie I/O

Przykładowe zadania

  • "Kajaki" z IV OI
  • "Małpki" z Solve
  • zadania z przedziałami
    • "Dyżury" z Solve
    • "Szpilki i zdjęcia" z Solve
    • "Too Many Segments" z Codeforces
  • reszta zadań

Podziękowania

About

zbiór bardzo fajnych algorytmów

License:Other


Languages

Language:C++ 100.0%