PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

Union-Find (Disjoint Set) – implementacja PHP, wykrywanie cykli, deduplicacja

  • 0
Henryk Tews
czwartek, 13 sierpnia 2026 / Opublikowano w Algorytmy

Union-Find (Disjoint Set Union) to struktura danych do zarządzania zbiorami rozłącznymi. Umożliwia dwie operacje w czasie niemal O(1): sprawdzenie czy dwa elementy należą do tego samego zbioru (Find) i połączenie dwóch zbiorów (Union). Algorytm pojawia się w problemach grafowych, wykrywaniu cykli i grupowaniu elementów. W Magento 2 przydaje się przy łączeniu zduplikowanych klientów i produktów.

(więcej…)

Algorytm Dijkstry – najkrótsza ścieżka w grafie, implementacja PHP

  • 0
Henryk Tews
środa, 08 lipca 2026 / Opublikowano w Algorytmy

Algorytm Dijkstry to klasyczny algorytm wyszukiwania najkrótszej ścieżki w grafie ważonym z nieujemnymi wagami. Działa w O((V + E) log V) z kolejką priorytetową, gdzie V to liczba wierzchołków a E krawędzi. Praktyczne zastosowania to routing, nawigacja GPS, systemy rekomendacji i optymalizacja sieci. Pokażę implementację w PHP z kolejką priorytetową i dwa realne przykłady użycia.

(więcej…)

Skip List – probabilistyczna struktura danych O(log n), implementacja w PHP

  • 0
Henryk Tews
piątek, 22 maja 2026 / Opublikowano w Algorytmy

Skip List to probabilistyczna struktura danych wynaleziona przez Williama Pugha w 1990 roku. Łączy prostotę listy jednokierunkowej z wydajnością drzewa binarnego – operacje wyszukiwania, wstawiania i usuwania działają w O(log n) średnio, bez potrzeby balansowania jak w AVL czy Red-Black Tree. W PHP jest rzadko używana, ale świetnie ilustruje jak losowość może zastąpić złożone algorytmy balansowania.

(więcej…)

LRU Cache – O(1) implementacja z HashMap + lista dwukierunkowa, per-request cache

  • 0
Henryk Tews
wtorek, 17 grudnia 2024 / Opublikowano w Algorytmy

LRU (Least Recently Used) Cache to jeden z klasycznych problemów algorytmicznych z rozmów rekrutacyjnych, ale też realna struktura danych używana w systemach produkcyjnych. Redis domyślnie używa wariantu LRU do eksmisji kluczy. PHP OPcache stosuje LRU. Pokazuję jak zaimplementować LRU Cache w O(1) dla get i put, używając hashmapy i listy dwukierunkowej – i gdzie to ma zastosowanie w e-commerce.

(więcej…)

Bloom Filter – probabilistyczna struktura, blacklisty tokenów, negative cache

  • 0
Henryk Tews
wtorek, 17 września 2024 / Opublikowano w Algorytmy

Bloom Filter to probabilistyczna struktura danych która odpowiada na pytanie „czy ten element może być w zbiorze?” – z gwarancją braku false negatives i kontrolowanym poziomem false positives. Używa ułamka pamięci potrzebnej tablicy hashowej. Gdy masz milion zakazanych tokenów, setki tysięcy unikalnych emaili do walidacji albo cache który musi odrzucić żądania bez trafień do bazy – Bloom Filter jest właściwym narzędziem.

(więcej…)

Trie – drzewo prefiksowe, autouzupełnianie, filtr spamu, benchmark vs array

  • 0
Henryk Tews
wtorek, 16 kwietnia 2024 / Opublikowano w Algorytmy

Trie (drzewo prefiksowe) to struktura danych zoptymalizowana pod wyszukiwanie słów i prefiksów. Zamiast porównywać każde słowo ze słownikiem, Trie przechodzi po literach – każdy węzeł to jedna litera, każda ścieżka od korzenia to słowo. Autouzupełnianie w wyszukiwarce, walidacja SKU, wykrywanie spamu – Trie pojawia się w e-commerce częściej niż myślisz. Implementuję od zera w PHP z praktycznymi przykładami.

(więcej…)

Dijkstra – najkrótsza ścieżka z wagami, SplMinHeap, zastosowania w e-commerce

  • 0
Henryk Tews
wtorek, 08 sierpnia 2023 / Opublikowano w Algorytmy, PHP

W maju 2021 pisałem o BFS i DFS dla grafów bez wag. Czas na algorytm Dijkstry – klasyczny algorytm znajdowania najkrótszej ścieżki w grafie z wagami nieujemnymi. Pojawia się wszędzie tam gdzie „najkrótsza” nie oznacza „najmniej kroków”, ale „najmniejszy koszt” – routing, optymalizacja dostaw, recommendation engines.

(więcej…)

Quicksort – warianty, Introsort, benchmark vs wbudowany sort()

  • 0
Henryk Tews
wtorek, 13 września 2022 / Opublikowano w Algorytmy

W listopadzie 2018 pisałem o podstawowych algorytmach sortowania. Czas na Quicksort – jeden z najważniejszych algorytmów w historii informatyki, średnio O(n log n) i jeden z najszybszych w praktyce. Implementuję kilka wariantów w PHP, pokazuję gdzie Quicksort bije inne algorytmy i dlaczego wbudowany sort() PHP jest szybszy niż własna implementacja.

(więcej…)

Programowanie dynamiczne – memoizacja, knapsack, LCS, dekorator memoize

  • 0
Henryk Tews
wtorek, 07 grudnia 2021 / Opublikowano w Algorytmy

Programowanie dynamiczne (DP) to technika rozwiązywania problemów przez rozbicie ich na podproblemy i zapamiętywanie wyników aby nie liczyć ich wielokrotnie. Brzmi abstrakcyjnie, ale w praktyce stosujesz DP kiedy piszesz cache dla kosztownej operacji albo szukasz optymalnego zestawu produktów do oferty. Pokazuję dwa klasyczne problemy z implementacją w PHP.

(więcej…)

BFS i DFS – przeszukiwanie grafów, najkrótsza ścieżka, wykrywanie cykli

  • 0
Henryk Tews
wtorek, 11 maja 2021 / Opublikowano w Algorytmy

Grafy to struktury danych, które pojawiają się w zaskakujących miejscach: drzewo kategorii w Magento, zależności między modułami, sieć powiązanych produktów, routing w aplikacjach. BFS i DFS to dwa fundamentalne algorytmy przeszukiwania grafów. Implementuję oba w PHP i pokazuję gdzie realnie je stosuję.

(więcej…)

  • 1
  • 2
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}