Struktury danych: Tablice

Transkrypt

Struktury danych: Tablice
Struktury danych: Tablica
11/23/2005
Przypomnienie
Struktury danych:
Tablice
!
O przydatności tablic
Zapamiętywanie wektora
Zapamiętywanie tablic 2D
Wielomian adresowy
Wiele języków programowania wysokiego poziomu
operuje algorytmami w taki sposób, jakby dane były
zapisane w prostokątnym obszarze zwanym
jednorodną tablicą.
!
!
Jednorodność oznacza, ze wszystkie elementy są tego
samego typu
Wiedząc więcej o translacji, językach
programowania zajmiemy się tym, jaki związek mają
tablice z pojedynczymi komórkami pamięci.
2/12
Proste zadanie
!
!
!
!
!
©2005 R. Robert ‘RoG@j’ Gajewski
Proste rozwiązanie
Odczytujemy co godzinę temperaturę
Zapisujemy je w jednowymiarowej tablicy
Do odczytu będziemy odwoływać się za pomocą
pozycji na liście
Pozycję tę nazywa się indeksem
Sposób zapisywania indeksowania zależy od…
języka programowania
!
Jak przekształcić koncepcję tablicy na rzeczywiste
rozmieszczenie danych w pamięci komputera?
!
!
!
Na czym polega pomysł?
!
!
3/12
©2005 R. Robert ‘RoG@j’ Gajewski
4/12
Zapamiętywanie wektora
x
!
!
!
5/12
Kłopot z dwoma wymiarami
x+1 x+2
!
Nie zawsze dane będą tylko `jednowymiarowe`
!
!
Temp [1]
Temp [2]
Temp [3]
Temp [4]
!
(C)2005 R. Robert "RoG@j" Gajewski
6/12
A jeśli temperatury mierzone co godzinę będą dotyczyć
całego miesiąca?
Chcielibyśmy móc sięgnąć do określonej temperatury z
wybranego dnia…
Wyobraźmy sobie wynik sprzedaży różnych sklepów z
poszczególnych dni…
W obu przypadkach dane najwygodniej jest
przechowywać w dwuwymiarowej tablicy
!
©2005 R. Robert ‘RoG@j’ Gajewski
Znając adres pierwszej komórki jesteśmy w stanie `dobrać`
się do pozostałych
Jeśli pierwsza informacja jest w komórce x to czwarta
będzie w x+4
©2005 R. Robert ‘RoG@j’ Gajewski
KOMÓRKI
PAMIĘCI
!
Dane można pamiętać w kolejnych 24 komórkach pamięci
w kolejności ich występowania w tablicy
To założenie jest oczywiście słuszne dla danych
zapisywanych tylko w jednej komórce (bajcie???)
Wiersze to mogą być wyniki poszczególnych sklepów,
kolejne kolumny to wyniki z poszczególnych dni
©2005 R. Robert ‘RoG@j’ Gajewski
1
Struktury danych: Tablica
11/23/2005
Odwzorowanie
!
Mamy problem…
!
!
!
!
!
Wierszami czy kolumnami?
!
Pamięć komputera jest liniowa!
Nie ma ona postaci prostokątnej macierzy
Prostokątną strukturę trzeba zasymulować, odwzorować.
!
!
Możemy określić, ile miejsca potrzeba w liniowej
pamięci na odwzorowanie prostokątnej macierzy
Można więc także zarezerwować odpowiedni
fragment pamięci komputera na ten cel…
7/12
©2005 R. Robert ‘RoG@j’ Gajewski
W zarezerwowanym bloku pamięci umieszczane są
dane z tablicy
!
W obu tych przypadkach powstaje zasadniczy
problem
!
©2005 R. Robert ‘RoG@j’ Gajewski
Czytanie i zapisywanie
!
Jak znaleźć komórkę zawierającą wartość z
trzeciego wiersza i czwartej kolumny?
!
!
!
!
!
!
!
11/12
Bez tego nie da rady…
©2005 R. Robert ‘RoG@j’ Gajewski
Wielomian adresowy
Znajdujemy się w pierwszej komórce…
Aby dostać się do trzeciego wiersza `omijamy`
obszar zajmowany przez wiersze 1 i 2
!
Zapis wierszami
Informacja o liczbie kolumn
10/12
Algorytm odczytu
!
Zakładamy, że macierz zapisujemy w sposób `naturalny`,
tak jak czytamy, czyli wierszami
Aby dokonać tego odczytu musimy wiedzieć, ile jest
w tablicy kolumn
!
©2005 R. Robert ‘RoG@j’ Gajewski
Jak odnaleźć w liniowej pamięci komputera odpowiednią
komórkę dwuwymiarowej tablicy
8/12
Zapamiętywanie wierszami
9/12
Można to wykonać wiersz po wierszu
Wtedy tablicę zapamiętujemy wierszami
Można to wykonać kolumna po kolumnie
Wtedy tablicę zapamiętujemy kolumnami
!
!
!
c – liczba kolumn
i – numer wiersza
j – numer kolumny
Ponieważ mamy pięć kolumn to omijamy 10 wyrazów
Aby dostać się do czwartej kolumny musimy jeszcze
ominąć trzy wyrazy
Dojście do wyrazu [3,4] wymaga więc `ominięcia` 13
wyrazów
©2005 R. Robert ‘RoG@j’ Gajewski
(C)2005 R. Robert "RoG@j" Gajewski
c·(i-1)+(j-1)
12/12
©2005 R. Robert ‘RoG@j’ Gajewski
2