9.1 Особливості масивів постійного розміру
Масиви постійного розміру — це масиви, розмір яких визначається при їх створенні і не може змінюватися в процесі виконання програми. В Python масиви постійного розміру можна створити за допомогою бібліотеки array або використовувати списки, хоча списки в Python можуть змінювати розмір, вони використовуються аналогічно масивам в інших мовах.
Особливості масивів постійного розміру:
- Фіксований розмір: Розмір масиву задається при його створенні і не може бути змінений.
- Однорідність: Всі елементи масиву повинні бути одного типу.
- Швидкий доступ за індексом: Доступ до елементів масиву здійснюється за постійний час
O(1). - Незмінність розміру: Кількість елементів масиву залишається постійною, і додавання нових елементів неможливо.
Приклад створення масиву постійного розміру в Python:
З використанням бібліотеки array:
import array
# Створення масиву з цілих чисел (тип 'i' для int)
arr = array.array('i', [1, 2, 3, 4, 5])
# Доступ до елементів
print(arr[2]) # Вивід: 3
# Зміна значення елемента
arr[2] = 10
print(arr) # Вивід: array('i', [1, 2, 10, 4, 5])
З використанням списку (імітуємо масив постійного розміру):
# Створення списку фіксованого розміру
arr = [0] * 5
# Ініціалізація елементів
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
# Доступ до елементів
print(arr[2]) # Вивід: 3
# Зміна значення елемента
arr[2] = 10
print(arr) # Вивід: [1, 2, 10, 4, 5]
9.2 Переваги та недоліки масивів постійного розміру
У всього є свої сильні та слабкі сторони, у фіксованих масивів вони такі.
Переваги:
- Швидкий доступ за індексом: Доступ до будь-якого елемента масиву здійснюється за постійний час
O(1), що робить масиви дуже ефективними для читання даних. - Простота реалізації: Масиви прості у розумінні та використанні, їх легко реалізувати та застосувати в різних задачах.
- Ефективне використання пам'яті: Оскільки розмір масиву фіксований, пам'ять виділяється одразу при створенні масиву, що дозволяє уникнути витрат на переназначення пам'яті.
- Передбачуваність: Фіксований розмір масиву спрощує управління пам'яттю та передбачуваність використання ресурсів.
Недоліки:
- Незмінність розміру: Розмір масиву задається при його створенні і не може бути змінений. Це означає, що потрібно заздалегідь знати необхідний розмір масиву або ризикувати надлишковим виділенням пам'яті.
- Витрати на вставку та видалення: Вставка та видалення елементів можуть бути затратними за часом, оскільки вимагають зсуву елементів. В гіршому випадку вставка чи видалення елемента в середині масиву займає
O(n)часу. - Неефективне використання пам'яті: Якщо масив використовується не повністю, то залишкові комірки пам'яті залишаються незаповненими, що може призвести до неефективного використання пам'яті.
- Обмежена гнучкість: Масиви не дозволяють динамічно змінювати розмір, що робить їх менш гнучкими в порівнянні з динамічними структурами даних, такими як списки.
9.3 Приклади використання та застосування
Ось кілька прикладів використання та застосування масивів постійного розміру.
Приклад 1: Таблиці та матриці
Масиви постійного розміру часто використовуються для представлення таблиць та матриць, де розмір відомий заздалегідь.
import numpy as np
# Створення 3x3 матриці з фіксованим розміром
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# Доступ до елементів матриці
print(matrix[1][2]) # Вивід: 6
# Зміна елемента матриці
matrix[1][2] = 10
print(matrix)
# Вивід:
# [[ 1 2 3]
# [ 4 5 10]
# [ 7 8 9]]
Приклад 2: Буфери та кеші
Масиви постійного розміру використовуються для створення буферів та кешів, де розмір буфера відомий заздалегідь і не змінюється.
# Буфер фіксованого розміру для читання даних
buffer_size = 1024
buffer = bytearray(buffer_size)
# Заповнення буфера даними
data = b"Hello, World!"
buffer[:len(data)] = data
print(buffer[:len(data)]) # Вивід: b'Hello, World!'
Приклад 3: Зберігання даних про час та дати
Масиви постійного розміру можуть використовуватися для зберігання даних про час і дати, таких як кількість днів у кожному місяці.
У цьому прикладі ми емулюємо поведінку фіксованого масиву через клас list:
# Кількість днів у кожному місяці (не високосний рік)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Доступ до даних
month = 2 # Лютий
print(f"У лютому {days_in_month[month - 1]} днів") # Вивід: У лютому 28 днів
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ