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