Wybrane algorytmy tablicowe

Podobne dokumenty
2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Pojęcia podstawowe. Złożonośd czasowa algorytmów. Rekurencja

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Algorytmy z powrotami. Algorytm minimax

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Programowanie Proceduralne

Ogólne wiadomości o grafach

Algorytmy sortujące i wyszukujące

E S - uniwersum struktury stosu

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Metody Metody, parametry, zwracanie wartości

Podstawy obiektowości

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Strategia "dziel i zwyciężaj"

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Projektowanie algorytmów rekurencyjnych

Analiza algorytmów zadania podstawowe

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Programowanie w VB Proste algorytmy sortowania

Wstęp do programowania

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Języki i metody programowania Java INF302W Wykład 2 (część 1)

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Podstawy Java. Część II. mgr inż.marcin Borkowski

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Informatyka A. Algorytmy

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Strumienie, pliki. Sortowanie. Wyjątki.

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Kontrola przebiegu programu

Sortowanie. Bartman Jacek Algorytmy i struktury

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Wstęp do programowania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

K4/D. Partyniewicz 3,5. using System; using System.Collections.Generic; using System.Text;

Algorytmy i Struktury Danych

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p.

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Wykład 3 Składnia języka C# (cz. 2)

Podstawy i języki programowania

Rekurencja (rekursja)

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Tablice jednowymiarowe

Algorytmy i Struktury Danych.

Podejście obiektowe. Tablice (1) obiektów

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Wstęp do programowania. Dariusz Wardecki, wyk. V

Zajęcia 6 wskaźniki i tablice dynamiczne

import java.util.locale; import java.util.scanner; public class Plecak {

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Proste programy w C++ zadania

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Laboratorium nr 7 Sortowanie

Programowanie w języku Java. Kolekcje

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

Podstawy i języki programowania

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

ALGORYTMY I STRUKTURY DANYCH

Laboratorium nr 1. i 2.

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

- - Ocena wykonaniu zad3. Brak zad3

Warsztaty dla nauczycieli

Wykład 4: Klasy i Metody

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Luty 2001 Algorytmy (4) 2000/2001

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Wykład 4. Klasa List Kolejki Stosy Słowniki

Matematyczne Podstawy Informatyki

Programowanie - wykład 4

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy Informatyki

Aplikacja wielowątkowa prosty komunikator

Transkrypt:

Wybrane algorytmy tablicowe Algorytmy i struktury danych Wykład 2. Rok akademicki: 2009/2010 Sortowanie przez wybieranie for (int i = 0; i < liczby.length - 1; i++) k = i; for (int j = i; j < liczby.length; j++) if (liczby[k] > liczby[j]) k = j; pomoc = liczby[i]; liczby[i] = liczby[k]; liczby[k] = pomoc; Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 2 1

Sortowanie przez wstawianie for (int i = 1; i < liczby.length; i++) pomoc = liczby[i]; j = i - 1; while ((j >= 0) && (pomoc < liczby[j])) liczby[j+1] = liczby[j]; j--; liczby[j+1] = pomoc; Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 3 Sortowanie bąbelkowe for (int i = 1; i < liczby.length; i++) for (j = liczby.length - 1; j >= i; j--) if (liczby[j-1] > liczby[j]) pomoc = liczby[j]; liczby[j] = liczby[j-1]; liczby[j-1] = pomoc; Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 4 2

Sito Eratostenesa (1/2) Sito Eratostenesa - algorytm pozwala na wyznaczenie liczb pierwszych mniejszych lub równych wartości N. Tworzymy listę wszystkich liczb naturalnych od 2 do N. Pierwsza liczba na liście jest liczbą pierwszą. Usuwamy z listy wszystkie wielokrotności wyznaczonej liczby pierwszej. Powtarzamy kroki 2 oraz 3 aż do momentu usunięcia wszystkich liczb z listy. Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 5 Sito Eratostenesa (2/2) Kolejna liczba pierwsza: 3 Kolejna liczba pierwsza: 5 Kolejna liczba pierwsza: 7 Kolejna liczba pierwsza: 11 Kolejna liczba pierwsza: 13 Kolejna liczba pierwsza: 17 Kolejna liczba pierwsza: 19 Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 6 3

Inwersja elementów w wektorze wersja iteracyjna import java.io.*; public class ParametryTablicowe static void drukuj(string s) System.out.print(s); static int czytajliczbe() throws IOException BufferedReader klaw = new BufferedReader (new InputStreamReader (System.in)); return Integer.parseInt(klaw.readLine()); Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 7 Inwersja elementów w wektorze wersja iteracyjna static int [] tworzwektor(int ileelementow) // metoda zwraca referencje do tablicy int [] tab = new int[ileelementow]; for(int i = 0; i < tab.length; i++) tab[i] = i; return tab; static void drukujwektor(int [] tab) for (int i = 0; i < tab.length; i++) drukuj(tab[i] + " "); drukuj("\n"); Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 8 4

Inwersja elementów w wektorze wersja iteracyjna static void inwersja(int [] tab) // metoda modyfikuje tablice przekazana jako parametr int i = 0; int j = tab.length - 1; int pomoc; while (i < j) pomoc = tab[i]; tab[i] = tab[j]; tab[j] = pomoc; i++; j--; Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 9 Inwersja elementów w wektorze wersja iteracyjna public static void main(string[] args) throws IOException drukuj("podaj liczbe elementow w wektorze: "); int ileelementow = czytajliczbe(); int [] wektor = tworzwektor(ileelementow); drukujwektor(wektor); inwersja(wektor); drukujwektor(wektor); Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 10 5

Tworzenie k-elementowych kombinacji bez powtórzeo n- elementowego zbioru Niech A oznacza zbiór składający się z n elementów. k-elementową kombinacją bez powtórzeń (k n) elementów zbioru A nazywamy każdy k-elementowy podzbiór zbioru A. Ilość k-elementowych kombinacji bez powtórzeń n elementów równa się: n k n! k! n k! Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 11 Tworzenie k-elementowych kombinacji bez powtórzeo n- elementowego zbioru Przykład Napisać program wyświetlający wszystkie k-elementowe kombinacje bez powtórzeń elementów zbioru obejmującego liczby naturalne od 1 do n (przyjmij, że wartości n oraz k podawane będą przez użytkownika w trakcie działania programu. Użytkownik określił wartości parametrów w następujący sposób: n = 4 k = 3 Liczba kombinacji: 4 Program wyświetlił wyniki: 1, 2, 3 1, 2, 4 1, 3, 4 2, 3, 4 Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 12 6

Tworzenie k-elementowych kombinacji bez powtórzeo n- elementowego zbioru Elementy wchodzące w skład każdej kombinacji wyświetlane będą w kolejności rosnącej - dzięki czemu możemy określid wartości maksymalne, które mogą się pojawid na kolejnych pozycjach: na pozycji k będzie to wartośd n, na pozycji k-1 będzie to n-1, itd. Kolejne kombinacje prezentowane są w porządku leksykograficznym (uporządkowanie słownikowe) - jeżeli byśmy przyjęli, że liczby wchodzące w skład danej kombinacji są kodami znaków, to utworzone w ten sposób słowa uporządkowane byłyby alfabetycznie. Czyli pierwsza kombinacja (dla n = 4 i k = 3) ma postad: 1, 2, 3. Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 13 Tworzenie k-elementowych kombinacji bez powtórzeo n- elementowego zbioru Przy generowaniu każdej następnej kombinacji realizuję kroki: indeks = k (numer rozpatrywanego elementu w kombinacji) max = n (wartośd maksymalna na pozycji indeks) wyszukuję pierwszą (od prawej strony pozycję), na której mogę umieścid wartośd większą od dotychczasowej (kolejno zmniejszam indeks oraz max) zwiększam wartośd znajdującą się na pozycji indeks o jeden na kolejne pozycje (czyli od pozycji indeks+1 do k) wpisuję kolejne liczby (na pozycji indeks+1 umieszczona zostanie wartośd o jeden większa od wartości znajdującej się na pozycji indeks, na pozycji indeks+2 znajdzie się wartośd o jeden większa od wartości znajdującej się na pozycji indeks+1, itd.) wyświetlam utworzoną w ten sposób kombinację. Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 14 7

Permutacje bez powtórzeo Niech A oznacza zbiór składający się z n elementów. Permutacją bez powtórzeo elementów zbioru A nazywamy każdy ciąg n-elementowy (a 1, a 2,..., a n ), składający się z różnych elementów zbioru A. Ilośd permutacji bez powtórzeo elementów zbioru A wynosi n!. Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 15 Permutacje bez powtórzeo Przykład Napisz program wyświetlający wszystkie permutacje elementów zbioru liczb całkowitych obejmującego kolejne wartości od 1 do n (wartość n ma być podawana w trakcie działania programu). Przykład n = 3 Liczba permutacji: 3! = 6 Wyniki działania programu: 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 16 8

Permutacje bez powtórzeo algorytm Dijkstry kolejne permutacje wyświetlane będą w porządku leksykograficznym pierwsza permutacja ma postad: 1, 2,... n zakładam, że elementy tworzące permutację przechowywane są w wektorze a indeksowanym wartościami od 1 do n Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 17 Permutacje bez powtórzeo algorytm Dijkstry przy generowaniu każdej następnej permutacji realizowane są następujące kroki: na podstawie bieżącej permutacji wyznaczana jest wartośd i, która jest maksymalną wartością indeksu, dla której spełniony jest warunek: a[i] < a[i+1] Przykład: dla a = *1 4 6 2 9 5 8 7 3+ poszukiwana wartośd i wynosi 6 fragment wektora a od pozycji i+1 do kooca nazywany jest ogonem. Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 18 9

Permutacje bez powtórzeo algorytm Dijkstry poszukujemy wartości j (przy czym j spełniad musi warunek: i+1 j n, czyli jest indeksem elementu znajdującego się w ogonie wektora a), dla której a[j] jest najmniejszą wartością spełniającą warunek a*j+ > a*i+ Przykład: dla wektora zdefiniowanego powyżej j jest równe 8 dokonujemy zamiany elementów znajdujących się na pozycji i oraz j Przykład: w powyższym przypadku uzyskujemy: a = *1 4 6 2 9 7 8 5 3+ odwracamy kolejnośd elementów znajdujących się w ogonie wektora a Przykład: w powyższym przypadku uzyskujemy: a = *1 4 6 2 9 7 3 5 8+ Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie 19 10