Стиснення даних (Компресія)

Стиснення даних — це процес зменшення обсягу інформації шляхом усунення зайвих даних.

Тип даних визначає природу інформації, що може зберігатися у змінній, а також набір операцій, дозволених над цією інформацією. Типізація забезпечує коректність обробку даних і допомагає уникати помилок.

Основні види:
- Примітивні типи: Цілі числа (int), числа з плаваючою комою (float), логічні значення (boolean), символи (char).
- Складені типи: Масиви (колекції однотипних елементів), об'єкти (користувацькі структури), структури (групи іменованих полів).

Системи типізації:
- Статична: Перевірка типів на етапі компіляції (C++, Java, Rust).
- Динамічна: Перевірка типів під час виконання (Python, JS).
- Сильна (Strong): Забороняє неявні перетворення типів.
- Слабка (Weak): Допускає автоматичну конвертацію (наприклад, додавання числа до рядка).

        graph LR
  Center["Стиснення даних (Компресія)"]:::main
  Rel_boolean["boolean"]:::related -.-> Center
  click Rel_boolean "/terms/boolean"
  Rel_data_modeling["data-modeling"]:::related -.-> Center
  click Rel_data_modeling "/terms/data-modeling"
  Rel_data_structure["data-structure"]:::related -.-> Center
  click Rel_data_structure "/terms/data-structure"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простими словами

Уявіть, що ви пакуєте валізу. Якщо ви просто кидаєте речі купою, вони не влізуть. Якщо ви їх акуратно складете (стиснете), вони займуть менше місця. Стиснення без втрат — це як скласти одяг: ви можете його розгорнути і він буде як новий. Стиснення з втратами — це як викинути упаковки від шампунів: сам шампунь залишився, але коробку ви вже не повернете.

🤓 Expert Deep Dive

У теорії типів, система Хіндлі-Мілнера дозволяє виводити типи статично без явних анотацій (Haskell, OCaml). Алгебраїчні типи даних (ADT) — суми та добутки типів — дозволяють будувати складні моделі без null (Option/Maybe). Залежні типи (Dependent Types, як в Idris) дозволяють типам залежати від значень, кодуючи інваріанти програми на рівні компілятора. Поступова типізація (Gradual Typing, як у TS) дозволяє змішувати статичний та динамічний підходи.

📚 Джерела