SDR #4Pluto+, co to jest?
Przegląd Pluto+: architektura, możliwości, programowanie z Pythona, połączenie po USB i Ethernet, pierwszy chirp.
Przegląd Pluto+: architektura, możliwości, programowanie z Pythona, połączenie po USB i Ethernet, pierwszy chirp.
Omawiam algorytm Boyer–Moore: porównywanie wzorca od końca, regułę złego znaku (bad character) oraz regułę dobrego sufiksu (good suffix). Pokazuję, dlaczego BM w typowym przypadku jest sublinearny i kiedy wygrywa, a kiedy przegrywa z KMP.
Krok po kroku przechodzimy przez podłączenie falownika Huanyang do magistrali RS‑485, konfigurację protokołu w falowniku oraz przykładowe skrypty w Pythonie, które pozwalają z poziomu komputera ustawiać obroty, kierunek i odczytywać bieżące parametry pracy.
Rozwiązuję zadanie „znajdź głębokość największego wąwozu w ciągu wysokości terenu”, pokazując prosty, liniowy algorytm. Krótko omawiam złożoność czasową i pamięciową.
Jak wywoływać tylko raz kosztowną funkcje lub metodę i zwracać wynik pierwszego wykonania
Wprowadzam algorytm Knuth–Morris–Pratt do wyszukiwania wzorca w tekście: intuicja stojąca za funkcją prefix/suffix, konstrukcja tablicy „lps” oraz analiza złożoności. Omawiam też, kiedy KMP ma przewagę nad naiwnym porównywaniem znak po znaku.
Na prostym przykładzie pokazuję klasyczny, naiwny algorytm wyszukiwania podciągu w tekście oraz szczegółowo omawiam jego ograniczenia: złożoność czasową, powtarzane porównania i sytuacje, w których to podejście zaczyna być problematyczne.
Praktyczne wprowadzenie do ekosystemu kart zbliżeniowych MIFARE, szczegółowo omawiając różnice techniczne między popularnymi modelami Classic oraz Ultralight. Wyjaśnienie standardu ISO/IEC 14443, mapy pamięci układów oraz kluczowe aspekty bezpieczeństwa i ograniczenia obu technologii. Całość uzupełnia instruktaż programistycznej obsługi kart w języku Python, obejmujący konfigurację czytnika ACR122 oraz komunikację za pomocą ramek APDU.
Wprowadzam pojęcie programowania dynamicznego i pokazuję, jak zastosować go do rozwiązania problemu Longest Common Subsequence. Przedstawiam koncepcję rozdzielania problemu na mniejsze części i wykorzystywania wyników tych części do uzyskania rozwiązania głównego. Na przykładzie ilustruję, jak wykorzystać wiedzę o najdłuższych wspólnych podciągach do obliczenia najdłuższego wspólnego podciągu dla dwoch ciągów znaków.
Wprowadzam pojęcie programowania dynamicznego i pokazuję, jak zastosować go do rozwiązania problemu Longest Increasing Sequence. Przedstawiam koncepcję rozdzielania problemu na mniejsze części i wykorzystywania wyników tych części do uzyskania rozwiązania głównego. Na przykładzie ilustruję, jak wykorzystać wiedzę o najdłuższych podciągach do obliczenia najdłuższego podciągu po dodaniu nowego elementu do ciągu.
W zadaniu rekrutacyjnym #3 zaimplementowano funkcję, która liczy elementy w liście jednokierunkowej, korzystając z referencji do obiektu. Przedstawiono dwa rozwiązania: jedno z wykorzystaniem odległości do początku i końca listy, a drugie z wykorzystaniem garbage collector'a do znalezienia referencji do obiektu. Opisano również ograniczenia i zastosowania takiego podejścia w praktyce.
Wyjaśniam, czym jest stdout w Pythonie i jak działa przekierowanie standardowego wyjścia – zarówno na poziomie systemu, jak i wewnątrz samego Pythona. Na przykładach pokazuję zapis do pliku, przechwytywanie wyjścia oraz integrację z logowaniem.