Sobes.tech
Junior

Jaka jest trudność w korzystaniu z tablic i tablic haszujących?

sobes.tech AI

Odpowiedź od AI

Tablice

  • Stała wielkość: Zmiana rozmiaru tablicy (dodawanie/usuwanie elementów) może być operacją kosztowną, wymagającą przydzielenia nowej pamięci i skopiowania danych.
  • Nieefektywne wstawianie/usuwanie w środku: Wstawianie lub usuwanie elementu w środku tablicy wymaga przesunięcia wszystkich kolejnych elementów, co zajmuje czas proporcjonalny do liczby przesuwanych elementów (O(n)).
  • Typowanie (w niektórych językach): W językach o ścisłym typowaniu tablice mogą przechowywać tylko elementy tego samego typu danych, co ogranicza elastyczność.

Tablice mieszające (słowniki)

  • Kolizje: Możliwość wystąpienia kolizji hash (różne klucze dają ten sam hash), co wymaga dodatkowych mechanizmów rozwiązywania (otwarte adresowanie, łańcuchy) i zwiększa czas dostępu.
  • Brak uporządkowania: Elementy w tablicy mieszającej nie mają gwarantowanego porządku, co może być niewygodne podczas iteracji w określonej kolejności.
  • Wymóg kluczy hashowalnych: Klucze muszą być niezmienne (hashable) i mieć poprawnie zaimplementowaną funkcję hash. Obiekty zmienne (np. listy) nie mogą być kluczami.
  • Koszty pamięci: Tablice mieszające mogą zużywać więcej pamięci niż tablice, ze względu na konieczność przechowywania dodatkowych informacji (np. wskaźników na łańcuchy).
# Przykład wstawiania w środek listy (podobnie do zmiany tablicy w Pythonie)
moja_lista = [1, 2, 4, 5]
moja_lista.insert(2, 3) # Przesuwa elementy

# Przykład tworzenia niezmiennego klucza dla słownika
mój_słownik = {tuple([1, 2]): "wartość"}