czwartek, 16 grudnia 2021

Bazy danych

 Bazy Danych

Baza danych to zorganizowany zbiór usystematyzowanych informacji, czyli danych, zwykle przechowywany w systemie komputerowym w formie elektronicznej. Bazą danych steruje zwykle system zarządzania bazami danych (DBMS). Dane i system DBMS oraz powiązane z nimi aplikacje razem tworzą system bazodanowy, często nazywany w skrócie bazą danych.


Typy baz danych

Istnieje wiele różnych typów baz danych. Wybór bazy danych optymalnej dla danego przedsiębiorstwa zależy od sposobu, w jaki przedsiębiorstwo zamierza korzystać z danych.

  • Relacyjne bazy danych. Relacyjne bazy danych stały się niezwykle popularne w latach 80. Elementy w relacyjnej bazie danych są zorganizowane jako zbiór tabel zawierających kolumny i wiersze. Technologia relacyjnych baz danych zapewnia najbardziej efektywny i elastyczny sposób na uzyskanie dostępu do uporządkowanych informacji.
  • Obiektowe bazy danych. Informacje w obiektowych bazach danych mają postać obiektów, podobnie jak w oprogramowaniu obiektowym.
  • Rozproszone bazy danych. Rozproszona baza danych składa się z co najmniej dwóch plików znajdujących się w różnych lokalizacjach. Baza danych może być przechowywana na wielu komputerach znajdujących się w tej samej lokalizacji fizycznej lub rozproszonych w różnych sieciach.
  • Hurtownie danych. Centralne repozytorium danych — hurtownia danych — to typ bazy danych przeznaczony głównie do szybkiego wykonywania zapytań i analizy.
  • Bazy danych NoSQL. Baza danych NoSQL, czyli nierelacyjna baza danych, umożliwia przechowywanie nieusystematyzowanych i częściowo usystematyzowanych danych oraz manipulowanie nimi (w przeciwieństwie do relacyjnych baz danych, które określają sposób organizacji wszystkich danych wprowadzanych do bazy danych). Bazy danych NoSQL zyskały na popularności wraz z upowszechnieniem i wzrostem złożoności aplikacji internetowych.
  • Grafowe bazy danych. Grafowa baza danych przechowuje dane w postaci encji i relacji między encjami.
  • Bazy danych OLTP. Baza danych OLTP to szybka, analityczna baza danych przeznaczona do wykonywania dużej liczby transakcji przez wielu użytkowników.

To tylko kilka spośród kilkudziesięciu typów używanych obecnie baz danych. Inne, mniej powszechne bazy danych realizują ściśle określone funkcje naukowe, finansowe i inne. Oprócz różnych typów baz danych istotne są także zmiany technologiczne oraz nowe koncepcje, takie jak chmura i automatyzacja, które powodują rozwój baz danych w zupełnie nowych kierunkach. Kilka najnowszych typów baz danych:

  • Bazy danych open source. System bazodanowy open source to taki, którego kod źródłowy jest otwarty. Może on obejmować bazy danych SQL lub NoSQL.
  • Chmurowe bazy danych. Chmurowa baza danych to zbiór danych, usystematyzowanych lub nie, przechowywany na prywatnej, publicznej lub hybrydowej platformie przetwarzania w chmurze. Istnieją dwa modele chmurowych baz danych: tradycyjny i baza danych jako usługa (DBaaS). W przypadku baz danych DBaaS zadania związane z administracją i konserwacją są wykonywane przez usługodawcę.
  • Wielomodelowa baza danych. Wielomodelowe bazy danych to połączenie różnych typów modeli baz danych w jednym, zintegrowanym systemie zaplecza. Oznacza to, że mogą zawierać różne typy danych.
  • Bazy danych dokumentowe/JSON. Przeznaczone do przechowywania i pobierania informacji w postaci dokumentów i zarządzania nimi, dokumentowe bazy danych to nowoczesny sposób na przechowywanie danych w formacie JSON zamiast w postaci wierszy i kolumn.
  • Samoczynne bazy danych. Najnowsze i najbardziej przełomowe bazy danych, a mianowicie samoczynne bazy danych (nazywane także autonomicznymi bazami danych), działają w chmurze i wykorzystują samouczenie się maszyn do automatyzacji optymalizacji, zabezpieczania, tworzenia kopii zapasowych i aktualizowania baz danych oraz innych rutynowych zadań zarządzania tradycyjnie wykonywanych przez administratorów baz danych.

Język SQL

SQL to język programowania używany niemal przez wszystkie relacyjne bazy danych do tworzenia zapytań dotyczących danych, ich przetwarzania i definiowania oraz zapewniania kontroli dostępu. Język SQL został opracowany przez firmę IBM w latach 70. przy istotnym współudziale firmy Oracle, co spowodowało wprowadzenie standardu SQL ANSI i powstanie wielu rozszerzeń języka SQL przygotowanych przez firmy IBM, Oracle i Microsoft. Mimo że język SQL jest nadal powszechnie używany, zaczynają się pojawiać zupełnie nowe języki programowania.

MySQL

MySQL to system zarządzania relacyjnymi bazami danych typu open source oparty na języku SQL. Został opracowany i zoptymalizowany pod kątem zastosowań internetowych i działa na dowolnej platformie. Nowe wymagania związane z rozwojem Internetu spowodowały, że system MySQL jest najczęściej wybierany przez deweloperów internetowych oraz na potrzeby aplikacji internetowych. Ponieważ opracowano go w celu przetwarzania milionów zapytań i wykonywania tysięcy transakcji, system MySQL jest popularny w firmach z branży handlu elektronicznego, które muszą zarządzać wieloma przelewami pieniędzy. Podstawową funkcją systemu MySQL jest elastyczność na żądanie.

MySQL to system DBMS, z którego korzystają najpopularniejsze witryny i aplikacje internetowe na świecie, w tym Airbnb, Uber, LinkedIn, Facebook, Twitter i YouTube.

Różnica między bazą danych, a arkuszem kalkulacyjnym

Zarówno bazy danych jak i arkusze kalkulacyjne (na przykład Microsoft Excel) oferują wygodny sposób przechowywania informacji. Podstawowe różnice między nimi są następujące: Sposób przechowywania danych i ich przetwarzania. Użytkownicy z dostępem do danych.


Database Management System (DBMS) - systemy zarządzania bazami danych

Baza danych wymaga zwykle kompleksowego oprogramowania bazodanowego nazywanego systemem zarządzania bazami danych (DBMS). System DBMS stanowi interfejs między bazami danych a jego użytkownikami końcowymi lub programami, umożliwiając użytkownikom pobieranie i aktualizowanie informacji oraz zarządzanie sposobem ich organizacji i optymalizacji. System DBMS ułatwia także nadzorowanie i kontrolowanie baz danych, pozwalając na wykonywanie szeregu zadań administracyjnych, takich jak monitorowanie wydajności, optymalizacja, tworzenie oraz przywracanie kopii zapasowych.

Przykłady popularnego oprogramowania bazodanowego, czyli systemu DBMS, to MySQL, Microsoft Access, Microsoft SQL Server, FileMaker Pro, Oracle Database i dBASE.


Do najważniejszych cech SZBD można zaliczyć:

  • operowanie na dużych i bardzo dużych zbiorach danych
  • zarządzanie złożonymi strukturami.


Tradycyjne zastosowania baz danych obejmują tekie dziedziny jak:

  • Obsługa wpłat i wypłat w banku.
  • Rezerwacja biletów lotniczych.
  • Przeglądanie katalogu bibliotek UW w internecie.
  • Zakupy w supermarkecie.
  • Kartoteki pracowników (kadry i płace).
  • Księgowość

Inne zastosowania:

  • Multimedialne bazy danych: obrazy, muzyka, filmy.

  • Geograficzne systemy informacyjne (Geographic Information Systems — GIS).

  • Systemy analizy danych (Online Analytical Processing — OLAP) wykorzystujące hurtownie danych.

  • Poszukiwanie prawidłowości w danych (Data mining).

  • Naukowe i medyczne bazy danych

  • Wyszukiwarki informacji: Google, Amazon itp.

czwartek, 28 października 2021

niedziela, 24 października 2021

Czym się różni grafika wektorowa od rastrowej?

 GRAFIKA WEKTOROWA

Grafika wektorowa w dużej mierze opiera się na matematyce. Grafika wektorowa to krzywe, linie i punkty, które mają swoje miejsce w układzie współpodrzędnych. Dużą zaletą obrazu wektorowego jest wysoka jakość, którą szczególnie widać przy dużym zbliżeniu obiektu.


Naj­częst­sze for­ma­ty pli­ków:
  • .ai,
  • .cdr,
  • .svg,
  • .eps,
  • .pdf.

Najczęściej wykorzystywanymi programami do tworzenia grafiki wektorowej są: Adobe Illustrator, CorelDRAW, Inkscape, Xara, 3D Studio Max, AutoCAD.


Grafikę wektorową można zapisać w formatach zewnętrznych – odczytywalnych przez różne programy, np. w formacie EPS, PDF, SVG, a także w formatach odczytywanych tylko przez konkretne programy do grafiki wektorowej, np. w CDR (Corel Draw), DWG (AutoCAD). Istnieje możliwość eksportu plików obrazów wektorowych do formatów plików grafiki rastrowej, np. TIFF, JPG lub GIF.
Podręcznik oferuje ci wbudowany prosty edytor grafiki wektorowej o nazwie SVG. Za jego pomocą możesz wykonać własne projekty graficzne, a następnie zapisać je w lokalizacji swojego komputera.



Cechy gra­fi­ki wek­to­ro­wej:
  • pełna ska­lo­wal­ność,
  • pełna edy­to­wal­ność,
  • ogra­ni­czo­ne de­ta­le i efek­ty.
Grafiki wektorowe
są często wykorzystywane do tworzenia projektów biznesowych, takich jak logo i banery.



























GRAFIKA RASTROWA

Grafika rastrowa jest rodzajem komputerowej grafiki dwuwymiarowej. Podstawę stanowi tutaj matryca (siatka) drobnych punktów (pikseli), zwana bitmapą lub rastrem. Każdy piksel jest odpowiednio zdefiniowany w formie cyfrowej, ma swój własny, niezależny od innych kolor. Cały obraz składa się z tysięcy pikseli.


Trzy podstawowe tryby koloru w grafice rastrowej.

W trybie true color jest do dyspozycji 224 barw (ponad 16,7 milionów). W systemie barwnym RGB (wykorzystywanym w urządzeniach wyświetlających) piksel jest opisany przez 3 składowe, odpowiednio R (red), G (green), B (blue)
W systemie barwnym HSV (hue, saturation, value) lub HSB (hue, saturation, brightness) punkty są opisywane za pomocą innych składowych: odcienia barwy (np. czerwony), jej nasycenia (np. pastelowa) i jasności (jasna). 
Tryb CMYK (drukowanie czterema kolorami)



Naj­częst­sze for­ma­ty pli­ków:

  • .psd,
  • .tiff,
  • .jpg,
  • .png,
  • .gif.

Najczęściej wykorzystywanymi programami do tworzenia grafiki wektorowej są:

Adobe Photoshop, Corel PaintShop Pro, Affinity Photo, GIMP 


Cechy gra­fi­ki ra­stro­wej:

  • ogra­ni­czo­ne ska­lo­wa­nie,
  • ogra­ni­czo­ne moż­li­wo­ści edy­cji,
  • szcze­gó­ło­wość ob­ra­zu.

























Przykład grafik w tych technologiach:





Reklama

 Zapraszam do obejrzenia mojej reklamy maści Dolgit




wtorek, 25 maja 2021

Sortowanie bąbelkowe i szybkie

 Sortowanie bąbelkowe:

Prosta metoda sortowania, polega na porównywaniu dwóch kolejnych elementów i zamianie ich kolejności, jeżeli zaburza ona porządek, w jakim się sortuje tablicę.

Sortowanie szybkie

Jeden z popularnych algorytmów sortowania działających na zasadzie „dziel i zwyciężaj”. Dzielimy w nim tablicę wejściową, na mniejsze podtablice. Wykonujemy to, wyznaczając podział z wykorzystaniem punktu osiowego(pivot), zwanego inaczej elementem rozdzielającym.



środa, 28 kwietnia 2021

Jednoczesne znajdowanie minimum i maksimum w zbiorze n elementów

 Wersja obliczeń z użyciem tablic:

Algorytm jednoczesnego znajdowania min i max w zbiorze n elementów - wersja z tablicami



Wersja obliczeń "w locie":
Algorytm jednoczesnego znajdowania min i max w zbiorze n elementów
 "w locie":



poniedziałek, 26 kwietnia 2021

środa, 21 kwietnia 2021

poniedziałek, 19 kwietnia 2021

Obliczenia Silni

Program, który porównuje czas wykonania obliczeń silni z n w wersji iteracyjnej i rekurencyjnej dla max. 20 elementów.





środa, 24 marca 2021

środa, 17 marca 2021

Sito Eratostenesa

 

               Sito Eratostenesa

Zbiór liczb naturalnych bez liczby 1 składa się z dwóch rodzajów liczb:

  1. Liczb złożonych, które są podzielne przez liczby mniejsze z tego zbioru.

  2. Liczb pierwszych, które nie są podzielne przez liczby mniejsze z tego zbioru.

Pierwszy rodzaj liczby to wielokrotności liczb mniejszych. Jeśli zatem ze zbioru usuniemy wielokrotności kolejnych liczb, to pozostaną w nim tylko liczby pierwsze. Na tej właśnie zasadzie działa sito Eratostenesa - przesiewa liczby wyrzucając ze zbioru ich kolejne wielokrotności.


Algorytm Sita Eratostenesa

Wejście:

    n  - określa górny kraniec przedziału <2,n>, w którym poszukujemy liczb pierwszych
Wyjście:

    Liczby pierwsze z przedziału <2,n>

Dane pomocnicze:

    T[ ] - tablica o elementach logicznych, których indeksy obejmują przedział <2,n>

    i  - kolejne liczby, których wielokrotności usuwamy
    w  - wielokrotności liczb i
 

Krok 1:Ustaw wszystkie elementy T[ ] na true 
Krok 2:i  ← 2; rozpoczynamy od liczby 2
Krok 3:Jeśli i  ≥ nto idź do kroku 11; sprawdzamy, czy liczby osiągnęły koniec przedziału <2,n>
Krok 4:w  ← i  + i; liczymy pierwszą wielokrotność liczby i
Krok 5:Jeśli w  > nto idź do kroku 9; sprawdzamy, czy wielokrotność wpada w przedział <2,n>
Krok 6:T[w] ← false; jeśli tak, to usuwamy ją ze zbioru liczb
Krok 7:w  ← w  + i; obliczamy następną wielokrotność
Krok 8:Idź do kroku 5; i kontynuujemy usuwanie wielokrotności
Krok 9:i  ← i  + 1; wyznaczamy następną liczbę
Krok 10:Idź do kroku 3; i kontynuujemy
Krok 11:i  ← 2; przeglądamy tablicę T[ ]
Krok 12:Jeśli i  > nto zakończ 
Krok 13:Jeśli T[i] = true, to pisz i; wyprowadzamy liczby, które pozostały w T[ ]
Krok 14:i  ← i  + 1 
Krok 15:Idź do kroku 12 

 

obrazek


#include <iostream>

using namespace std;

const unsigned N = 1000;  // definiuje koniec przedziału <2,N>

int main()
{
    bool T[N+1];  // tablica musi obejmować indeksy od 2 do N
    unsigned i,w;

    // ustawiamy wszystkie elementy T[] na true

    for(i = 2; i <= N; i++) T[i] = true;

    // eliminujemy w T[] wielokrotności

    for(i = 2; i < N; i++)
        for(w = i + i; w <= N; w += i) T[w] = false;

    // wyświetlamy indeksy elementów pozostawionych w T[]

    for(i = 2; i <= N; i++)
        if(T[i]) cout << i << " ";

    cout << endl << "--- KONIEC ---\n\n";

    return 0;
} 


środa, 10 marca 2021

Wyznaczanie liczb pierwszych

 

Generacja liczb pierwszych

Liczba pierwsza jest liczbą naturalną, która posiada dokładnie dwa różne podzielniki - 1 i siebie samą.

Liczba 1 nie jest pierwszą, ponieważ dzieli się tylko przez 1, a nie posiada drugiego podzielnika różnego od 1. Przykłady liczb pierwszych:

 

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 ...

 

Liczby pierwsze maja olbrzymie zastosowanie we współczesnej informatyce. Na nich opierają się zaawansowane systemy szyfrujące, używane przez banki, służby państwowe i wojsko. Dlatego umiejętność sprawdzania pierwszości liczby oraz generacji liczb pierwszych jest podstawową umiejętnością każdego informatyka.


WYZNACZANIE LICZB PIERWSZYCH SPOSOBEM KLASYCZNYM

Dowód Euklidesa na nieskończoność zbioru liczb pierwszych:

Zbiór liczb pierwszych jest zbiorem nieskończonym. Oznacza to, że dla dowolnie dużej liczby naturalnej zawsze znajdziemy liczbę pierwszą, która jest od niej większa. Nieskończoność tego zbioru udowodnił grecki matematyk Euklides. Zastosował on dowód przez sprowadzenie do sprzeczności.

Załóżmy, że zbiór liczb pierwszych P  jest zbiorem skończonym i zawiera n  różnych liczb pierwszych:

 

obrazek

 

Euklides tworzy liczbę E (liczbę Euklidesa) wg następującego wzoru:

 

obrazek

 

Liczby E  nie dzieli żadna z liczb należących do zbioru P  - zawsze zostanie reszta 1:

 

obrazek

 

  1. Liczba E  nie jest podzielna przez żadną z liczb różną od 1 i siebie samej - zatem jest nową liczbą pierwszą, której nie ma w zbiorze P.

  2. Liczba E  jest podzielna przez liczbę pierwszą, której nie ma w zbiorze P, ponieważ te liczby E  nie dzielą.

Trzeciej możliwości nie ma. W obu możliwych przypadkach dostajemy nową liczbę pierwszą, której zbiór P  nie zawiera. Przeczy to założeniu, że zbiór P  zawierał wszystkie liczby pierwsze. Skoro tak, zbiór liczb pierwszych nie może być zbiorem skończonym.


Algorytm sprawdzania, czy liczba p jest liczbą pierwszą

Wejście:

p  - sprawdzana liczba naturalna

Wyjście:

t  = true, liczba p  jest liczbą pierwszą
t  = false, liczba p  nie jest liczbą pierwszą

Zmienne pomocnicze:

i  - kolejne dzielniki naturalne dla liczby p


Krok 1: t ← true                       ; zakładamy sukces

Krok 2: i ← 2                           ; pierwszy dzielnik

Krok 3: Jeśli i ≥ p, to zakończ ; sprawdzamy, czy dzielnik wciąż jest w zakresie od 2 do p-1

Krok 4: Jeśli p nie dzieli się przez i, to idź do kroku 7 ; przechodzimy do wyznaczenia                                                                                                 kolejnego podzielnika

Krok 5: t ← false                      ; p jest podzielne, zatem nie jest pierwsze

Krok 6: Zakończ

Krok 7: i ← i + 1                      ; wyznaczamy kolejny dzielnik

Krok 8: Idź do kroku 3             ; kontynuujemy sprawdzanie podzielności

  

 

obrazek



Program wykorzystujący podany algorytm do generacji n  liczb pierwszych.


#include <iostream>

using namespace std;

int main()
{
    int n,i,p,lp;
    bool t;

    cin >> n;

    lp = 0;
    p = 2;
    
    while(lp < n)
    {
        t = true;
        for(i = 2; i < p; i++)
            if(p % i == 0)
            {
                t = false;
                break;
            }

        if(t)
        {
            cout << p << " ";
            lp++;
        }
        p++;
    }

    cout << endl;

    return 0;
} 

30 tysięcy wyrazów w 35.828sekund. Jest wolniejszy o
22.399 sekund od ulepszonej wersji.

Ulepszenie algorytmu generacji liczb pierwszych przez sprawdzanie podzielności

Jeśli liczba p  jest liczbą złożoną (a zatem nie jest liczbą pierwszą), to można ją zapisać w postaci iloczynu dwóch liczb naturalnych a  i b, które obie są różne od liczby p:

 

obrazek

 

Z tych dwóch liczb a  i b  wystarczy znaleźć tylko jedną, aby wykluczyć pierwszość liczby p. Mamy dwa możliwe przypadki:

  1. Oba dzielniki są równe:

obrazek

  1. Oba dzielniki są różne:

obrazek


Algorytm sprawdzania, czy liczba p jest liczbą pierwszą - wersja ulepszona

Wejście:

p  - sprawdzana liczba naturalna, p  > 2

Wyjście:

t  = true, liczba p  jest liczbą pierwszą
t  = false, liczba p  nie jest liczbą pierwszą

Zmienne pomocnicze:

g  - pierwiastek całkowity z p
i  - kolejne dzielniki nieparzyste dla liczby p

Krok 1: t ← true ; zakładamy sukces
Krok 2: Jeśli p dzieli 2, to idź do kroku 7 ; eliminujemy
liczby podzielne przez 2

Krok 3: g ← |√p| ; obliczamy pierwiastek całkowity z p
Krok 4: i ← 3 ; pierwszy dzielnik nieparzysty
Krok 5: Jeśli i > g, to zakończ ; sprawdzamy, czy dzielnik wciąż jest
w zakresie od 2 do pierwiastka z p

Krok 6: Jeśli p nie dzieli się przez i, idź do kroku 9 ; przechodzimy do
wyznaczenia następnego podzielnika

Krok 7: t ← false ; p jest podzielne, zatem nie jest pierwsze
Krok 8: Zakończ
Krok 9: i ← i + 2 ; wyznaczamy kolejny dzielnik nieparzysty
Krok 10: Idź do kroku 4 ; kontynuujemy sprawdzanie podzielności

PROGRAM:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n,i,p,lp,g;
    bool t;

    cin >> n;

    lp = 0;
    p = 2;
    
    while(lp < n)
    {
        t = true;
        if(p > 2)
        {
            if(p % 2)
            {
                g = sqrt(p);
                for(i = 3; i <= g; i += 2)
                    if(p % i == 0)
                    {
                        t = false;
                        break;
                    }
            }
            else t = false;
        }

        if(t)
        {
            cout << p << " ";
            lp++;
        }
        p++;
    }

    cout << endl;

    return 0;
} 

30tysięcy wyrazów w 13.429sekund. Jest o 22.399sekund
szybszy od zwykłego algorytmu.