Zestaw 3 - Algorytmy podstawowe
Powyższa komórka, która wykonała się automatycznie definiuje ćwiczebną klasę wielomianu używaną wyłącznie na potrzeby tego zestawu. W zadaniach z tego zestawu należy zaimplementować odpowiednie algorytmy podstawowe dla powyższej klasy. Oczywiście dla wbudowanej w Sage'a normalnej klasy wielomianów, wszystkie te algorytmy są standardowo zaimplementowane.
Wielomiany z naszej klasy ćwiczebnej konstruujemy w jeden z następujących sposobów:
- wielomian( wspolczynniki ) - konstruuje wielomian nad ciałem o podanych współczynnikach
- wielomian( wspolczynniki, K ) - j.w. ale nad ciałem zamiast
Wypróbować na poniższych przykładach:
Nasza ćwiczebna klasa wielomianu w tej chwili udostępnia następujące metody i funkcje:
- deg(f) lub f.deg() to stopień wielomianu
- lc(f) lub f.lc() to współczynnik wiodący wielomianu
- f[i] to to -ty współczynnik wielomianu
- a*f gdzie jest stałą to iloczyn wielomianu i skalara
- f==g oraz f!=g to operatory porównania
Zadanie: Napisać funkcję znajdującą wielomian przeciwny do danego.
Wskazówka: j-ty współczynnik wielomianu jest dostępna jako f[j] zaś stopień tego wielomianu jako f.deg()
Zadanie: Zaimplementować obliczanie pochodnej wielomianu.
Zadanie: Zaimplementować obliczanie pochodnej wielomianu za pomocą arkusza kalkulacyjnego.
Zadanie: Napisać funkcję obliczającą wartość wielomianu w punkcie z użyciem schematu Hornera.
Zadanie: Obliczyć wartość wielomianu w punkcie (schematem Hornera) za pomocą arkusza kalkulacyjnego.
Zadanie: Napisać funkcję dodawania wielomianów.
Zadanie: Napisać funkcję odejmowania wielomianów
Zadanie: Napisać funkcję mnożenia wielomianów algorytmem ,,szkolnym".
Poniższa funkcja mnoży wielomian przez -tą potęgę zmiennej, za pomocą zapisu f << n (zwraca nowy wielomian ) lub f <<= n (zastępuje wielomianem ). Komórka wykona się automatycznie.
Zadanie: Zaimplementować funkcję mnożenia wielomianów algorytmem Karatsuby
Zadanie: Napisać funkcje, które wyznaczają zawartość i część pierwotną wielomianu o współczynnikach całkowitych.
Zadanie: Zaimplementować funkcję wyznaczania reszty i ilorazu wielomianów o współczynnikach z ciała.
Wskazówka: wyraz wiodący wielomianu otrzymujemy jako f.lc() lub lc(f).
Zadanie: Zaimplementować funkcję wyznaczania pseudo-reszty i pseudo-ilorazu.
Zadanie: Zaimplementować algorytm Euklidesa dla wielomianów o współczynnikach całkowitych.
Zadanie: Porównać rozmiary współczynników w krokach pośrednich algorytmu Euklidesa, zależnie od użytej funkcji uprość.
Wskazówka: użyć funkcji verbose i set_verbose.
Zadanie: Wyznaczyć zespolony pierwiastek pierwotny z jedynki stopnia 16.
Zadanie: Obliczyć dyskretną transformatę Fouriera wielomianu (tzn. ciągu jego współczynników) wprost z definicji.
Zadanie: Zaimplementować algorytm Cooley'a-Tukey'a szybkiej transformaty Fouriera. Obliczyć szybką transformatę Fouriera wielomianu .
Zadanie: Dla wielomianu z poprzedniego zadania, obliczyć bezpośrednio oraz używając FFT.
Zdania dodatkowe: teoria grafów
Zadanie: Utworzyć i narysować graf `diament' (polecenie graphs.DiamondGraph())
Zadanie: Wyznaczyć macierz sąsiedztwa tego grafu.
Zadanie: Skonstruować i narysować graf (nieskierowany) o macierzy sąsiedztwa Czy jest to graf spójny? Czy jest to graf Eulera? Czy jest to graf płaski?
Wskazówka: użyć metod is_connected, is_eulerian, is_planar.
Zadanie: Używając metody coloring znaleźć kolorowanie grafu z poprzedniego zadania. Narysować pokolorowany graf.
Zadanie: W grafie z poprzedniego zadania wyznaczyć odległość wierzchołków oraz . Jaka jest największa odległość wierzchołków w tym grafie (czyli jego średnica)?
Wskzaówka: metody distance oraz diameter.
Zadanie: Wyznaczyć najkrótszą ścieżkę łączącą wierzchołki 1 oraz 5.
Wskazówka: metoda shortest_path.