Page 124 - 4496
P. 124

Залишимо значення чисел, що потрапили до першого
                            відрізка, без змін. Значення чисел, що потрапили до другого
                            відрізка, будемо відраховувати від межі першого. При цьому у
                            другому відрізку одержимо (2, 6, 9, 12, 18, 19). Значення
                            чисел,   що    потрапили     до   третього    відрізка,  будемо
                            відраховувати від межі другого. При цьому у третьому
                            відрізку одержимо (0, 8, 9, 16, 20). Оскільки у кожному
                            відрізку числа менші значення h=21, то для їх подання
                            достатньо 5 розрядів, і для їх зберігання потрібно вже не 96, а
                            5  16 = 80 двійкових розрядів.
                                  Щоб знати, скільки чисел потрапило до кожного
                            відрізку, користуються значеннями границь. Для трьох
                            відрізків потрібні значення двох границь, які становлять
                            відповідно 5 (кількість чисел, що потрапили до першого
                            відрізка) і 11 (кількість чисел, що потрапили до першого і
                            другого відрізків). Для зберігання цих двох значень необхідно
                            ще 2  4 = 8 двійкових розрядів.
                                  Таким чином, при застосуванні розглянутого методу
                            економія пам’яті складає 96 - (80 + 8) = 8 двійкових розрядів.
                                  Даний приклад показує, що ефект стиснення залежить
                            від кількості відрізків, що впливає на кількість границь між
                            ними. Ефект стиснення зв’язаний також з шириною відрізка h,
                            оскільки від цього залежить кількість розрядів двійкового
                            подання чисел. Наприклад, при h = 16, коли всі числа у
                            відрізку менші 16, для їх подання достатньо 4 двійкових
                            розряди, і для зберігання всіх чисел потрібно тепер 4  16 = 64
                            розряди. Крім того, корисно, щоб величина h була степенем 2.
                            Дійсно, якби у нашому прикладі для ширини відрізка замість
                                                                        5
                            значення h = 21 взяти значення h = 32 = 2 , то для зберігання
                            чисел потрібні були б ті ж самі 5  16 = 80 двійкових розряди,
                            але кількість відрізків зменшилась би до двох (0..31 і 32..63).
                                  Припустимо, що в пам’яті необхідно розмістити M
                            впорядкованих за зростанням чисел. При цьому відомо, що
                            найбільше з них менше деякого N. При поданні цих чисел
                            звичайним двійковим кодом необхідний обсяг пам’яті
                            становить (в двійкових розрядах)
                                                        Q = M  log 2N.
                                                                                    7
                                  Наприклад, якщо всі числа менші N = 128 = 2 , то для
                                                                           7
                            зберігання кожного з них достатньо log 22 = 7 двійкових
                                                           121
   119   120   121   122   123   124   125   126   127   128   129