9.1 Cechy tablic o stałym rozmiarze
Tablice o stałym rozmiarze — to tablice, których rozmiar określany jest w momencie ich tworzenia i nie może się zmieniać w trakcie działania programu. W Pythonie tablice o stałym rozmiarze można stworzyć za pomocą biblioteki array
lub użyć list, chociaż listy w Pythonie mogą zmieniać rozmiar, są używane podobnie do tablic w innych językach.
Cechy tablic o stałym rozmiarze:
- Stały rozmiar: Rozmiar tablicy ustalany jest przy jej tworzeniu i nie może być zmieniony.
- Jednorodność: Wszystkie elementy tablicy muszą być tego samego typu.
- Szybki dostęp przez indeks: Dostęp do elementów tablicy odbywa się w stałym czasie
O(1)
. - Niezmienność rozmiaru: Liczba elementów tablicy pozostaje niezmienna, niemożliwe jest dodawanie nowych elementów.
Przykład tworzenia tablicy o stałym rozmiarze w Pythonie:
Używając biblioteki array
:
import array
# Tworzenie tablicy z liczb całkowitych (typ 'i' dla int)
arr = array.array('i', [1, 2, 3, 4, 5])
# Dostęp do elementów
print(arr[2]) # Wyjście: 3
# Zmiana wartości elementu
arr[2] = 10
print(arr) # Wyjście: array('i', [1, 2, 10, 4, 5])
Używając listy (imitując tablicę o stałym rozmiarze):
# Tworzenie listy o stałym rozmiarze
arr = [0] * 5
# Inicjalizacja elementów
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
# Dostęp do elementów
print(arr[2]) # Wyjście: 3
# Zmiana wartości elementu
arr[2] = 10
print(arr) # Wyjście: [1, 2, 10, 4, 5]
9.2 Zalety i wady tablic o stałym rozmiarze
Wszystko ma swoje mocne i słabe strony, mają je też tablice o stałym rozmiarze.
Zalety:
- Szybki dostęp przez indeks: Dostęp do dowolnego elementu tablicy odbywa się w stałym czasie
O(1)
, co czyni tablice bardzo wydajnymi przy odczycie danych. - Prostota implementacji: Tablice są proste do zrozumienia i użycia, łatwo je zaimplementować i stosować w różnych zadaniach.
- Efektywne wykorzystanie pamięci: Ponieważ rozmiar tablicy jest stały, pamięć jest przydzielana od razu przy jej tworzeniu, co pozwala uniknąć kosztów ponownego przydzielania pamięci.
- Przewidywalność: Stały rozmiar tablicy ułatwia zarządzanie pamięcią i przewidywalność wykorzystania zasobów.
Wady:
- Nie zmienność rozmiaru: Rozmiar tablicy ustalany jest przy jej tworzeniu i nie może być zmieniony. To oznacza, że trzeba z góry znać potrzebny rozmiar tablicy lub ryzykować nadmiernym przydzieleniem pamięci.
- Koszty wstawiania i usuwania: Wstawianie i usuwanie elementów mogą być kosztowne czasowo, ponieważ wymagają przesuwania elementów. W najgorszym przypadku wstawienie lub usunięcie elementu w środku tablicy zajmuje
O(n)
czasu. - Nieefektywne wykorzystanie pamięci: Jeśli tablica nie jest wykorzystywana w pełni, nieużywane komórki pamięci pozostają puste, co może prowadzić do nieefektywnego wykorzystania pamięci.
- Ograniczona elastyczność: Tablice nie pozwalają na dynamiczną zmianę rozmiaru, co czyni je mniej elastycznymi w porównaniu z dynamicznymi strukturami danych, takimi jak listy.
9.3 Przykłady zastosowania i wykorzystania
Oto kilka przykładów zastosowania i wykorzystania tablic o stałym rozmiarze.
Przykład 1: Tabele i macierze
Tablice o stałym rozmiarze są często używane do reprezentacji tabel i macierzy, gdzie rozmiar jest znany z góry.
import numpy as np
# Tworzenie macierzy 3x3 o stałym rozmiarze
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# Dostęp do elementów macierzy
print(matrix[1][2]) # Wyjście: 6
# Zmiana elementu macierzy
matrix[1][2] = 10
print(matrix)
# Wyjście:
# [[ 1 2 3]
# [ 4 5 10]
# [ 7 8 9]]
Przykład 2: Bufory i cache
Tablice o stałym rozmiarze są używane do tworzenia buforów i cache, gdzie rozmiar bufora jest znany z góry i nie zmienia się.
# Bufor o stałym rozmiarze do odczytu danych
buffer_size = 1024
buffer = bytearray(buffer_size)
# Wypełnienie bufora danymi
data = b"Hello, World!"
buffer[:len(data)] = data
print(buffer[:len(data)]) # Wyjście: b'Hello, World!'
Przykład 3: Przechowywanie danych o czasie i datach
Tablice o stałym rozmiarze mogą być używane do przechowywania danych o czasie i datach, takich jak liczba dni w każdym miesiącu.
W tym przykładzie emulujemy zachowanie stałej tablicy przez klasę list
:
# Liczba dni w każdym miesiącu (rok nieprzestępny)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Dostęp do danych
month = 2 # Luty
print(f"W lutym {days_in_month[month - 1]} dni") # Wyjście: W lutym 28 dni
GO TO FULL VERSION