Громадянам України

Який ідеальний список пропуску?

В ідеальному списку пропуску з n елементів ми мали б рівень 0, який пов’язує всі вузли, рівень 1, який пропускає всі інші вузли на рівні 0, рівень 2, який пропускає всі інші вузли на рівні 1, і так далі, поки додавання інших рівнів нічого не додасть.

Давайте спочатку подивимося, як виглядає ідеальний список пропусків: Ідеальний список пропусків матиме половина кількості вузлів у кожному наступному шарі. Якщо основний нижній пов’язаний список має n вузлів, верхній матиме n/2, потім n/4 і так далі, поки ми не досягнемо верхнього рівня, який має лише один вузол.

Спочатку зверніть увагу на очікувану кількість рівнів у списку пропуску O(log n). Причина в тому, що на рівні 0 ми маємо ʼn ключів, на рівні 1 ми очікуємо, що виживуть n/2 ключі, на рівні 2 ми очікуємо, що виживуть n/4 ключі, і так далі. Відповідно до того ж аргументу, який ми використовували в ідеальному випадку, після O(logn) рівнів ключів не залишиться.

Аналіз часу пошуку в списку пропусків Загалом, кожен «хід» в алгоритмі пошуку займає кілька кроків вниз і кілька кроків вперед. Кількість кроків вниз обмежена висотою списку, яка очікується O(log n) як показано вище.

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

Тому що якщо швидкість пропуску треку висока в такому списку відтворення, який є досить незалученим, це, ймовірно, означає, що його там не повинно бути. Частота пропусків на Spotify загалом становить близько 50%; хороший коефіцієнт пропуску був би скоріше 30-40%.