Научная статья на тему 'Застосування змішаних таблиць для роботи з елементами булевих матриць'

Застосування змішаних таблиць для роботи з елементами булевих матриць Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
64
17
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — А. В. Нечепуренко, Ю. І. Грицюк

Розглянуто питання застосування динамічної структури даних – змішаних таблиць (hash tables) для роботи з великими масивами, значна більшість елементів яких не використовується або має фіксовані значення. Здатність змішаних таблиць оптимізувати доступ до таких даних робить їх надзвичайно корисними в багатьох ситуаціях, які виникають під час розроблення сучасних програмних продуктів. До них належать задачі, пов'язані з аналізом розріджених масивів, які представляють, наприклад, булеві матриці суміжності чи інцидентності. Завдяки використанню змішаних таблиць пам'ять для зберігання кожного з бінарних елементів виділяється з пули вільної пам'яті комп'ютера тільки в міру потреби.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Application of the mixed tables is for storage of elements of boole matrices

The question of application of run-time structure of information is considered – the mixed tables (hash tables) for work with large arrays, considerable most elements of which are not utilized or have the fixed values. To optimize ability of the mixed tables access to such information does them extraordinarily useful in many situations which arise up during development of modern software products. Tasks, related to the analysis of disperse an array, which present, for example, the boole matrices of contiguity or incident, belong to them. Due to the use of the mixed tables memory is for storage each of binary elements selected from pools of free space of computer only to the extent of necessity.

Текст научной работы на тему «Застосування змішаних таблиць для роботи з елементами булевих матриць»

Л^ература

1. Wasserverbrauch und Abwassereinigung. Umweltbericht für den Kanton Zürich 2004. - 4 p.

2. Кульский Л.А., Стрекач П.П. Технология очистки пpиpодных вод. - К.: Высш. шк. -^б. - 48 с.

3. Nasseri S. Vaezi F., Mahvi A.H., Nabizadeh R., Haddadi S. Determination of the ultrasonic effectiveness in advanced wastewater treatment. J. Environ. Health. Sci. Eng. 200б, vol. 3, № 2, pp. 109-116.

4. Tsukamoto I. Yim B., Stavarache C.E., Furuta M., Hashiba K., Maeda Y. Imctivation of Saccharomyces cerevisiae by ultrasonic irradiation// Ultrasonics Sonochemistry, vol. 11 (2004) pp. 61-65.

5. Preeti C. Sangave, Aniruddha B. Pandit. Ultrasound and enzyme assisted biodegradation of distillery wastewater. J. of Environmental Management. Vol. 80, Issue 1, 2006, pp. 36-46.

УДК 681.3.06 Студ. А.В. Нечепуренко; доц. Ю.1. Грицюк, канд. техн. наук -

НЛТУ Украти, м. nbsis

ЗАСТОСУВАННЯ ЗМ1ШАНИХ ТАБЛИЦЬ ДЛЯ РОБОТИ З ЕЛЕМЕНТАМИ БУЛЕВИХ МАТРИЦЬ

Розглянуто питання застосування динамiчноi структури даних - змшаних таб-лиць (hash tables) для роботи з великими масивами, значна бшьшють едементсв яких не використовусться або мае фшсоваш значення. Здатшсть змшаних таблиць опти-мiзувати доступ до таких даних робить ix надзвичайно корисними в багатьох ситу-ащях, як виникають тд час розроблення сучасних програмних продукпв. До них належать задач^ пов'язаш з аналiзом розрщжених масивiв, як представляють, нап-риклад, булевi матрицi сумiжностi чи шцидентносп. Завдяки використанню змша-них таблиць пам'ять для збер^ання кожного з бшарних елементiв видiляеться з пули вшьно'1 пам'ятi комп'ютера тшьки в мiру потреби.

Stud. A.V. Nechepurenko, assist.prof. Yu.I. Grytcyuk-NUFWTof Ukraine, L'viv Application of the mixed tables is for storage of elements of boole matrices

The question of application of run-time structure of information is considered - the mixed tables (hash tables) for work with large arrays, considerable most elements of which are not utilized or have the fixed values. To optimize ability of the mixed tables access to such information does them extraordinarily useful in many situations which arise up during development of modern software products. Tasks, related to the analysis of disperse an array, which present, for example, the boole matrices of contiguity or incident, belong to them. Due to the use of the mixed tables memory is for storage each of binary elements selected from pools of free space of computer only to the extent of necessity.

1. Постановка завдання

Для роботи елементами булевих матриць, особливо якщо щ матриц мають велик розм1ри, юнуе проблема компактного ix збер1гання, а також ефективного пошуку потр1бних з них. Ефектившсть програмноi реашзацп ще1* задач! залежить вщ оргашзацп структури даних i вибраноi методики ix оброблення. Основою тако1' програми е шформацшно-пошукова система, призначено!" для створення бази даних, ii редагування та оброблення. Пошук потрiбного запису у базi здшснюеться шляхом порiвняння заданого ключового значення з ключами кожного елемента структури даних. Коли знайдено збiж-ний ключ, то запис можна зчитувати, по^м його редагувати чи обробляти. Широко вщома на сьогодш динамiчна структура як бшарт дерева [2, ст. 122] хоча i дае змогу ефективно здшснювати будь-який пошук, проте щ дерева

придатнi тшьки для роботи з вiдсортованими даними за рахунок значного зменшення необхщно! кiлькостi порiвнянь ключiв.

На противагу бшарним деревам записи, якi збертаються у звичайному масивi (чий шдекс е аналогом ключа), можуть бути знайдеш дуже швидко i без проведення будь-яких порiвнянь. Якщо вiдомi ключ (тобто iндекс маси-ву), розмiр запису i початкова адреса масиву, то обчислення адреси потрiбно-го запису вщбуваеться за допомогою множення i додавання. Незважаючи на те, що звичайнi масиви (одно-, дво- чи навггь багатовимiрнi) дають нам такi переваги, проте часто трапляються задачi (наприклад, булевi матрищ великих розмiрiв), коли необхiдно збертати декiлька сотень записiв з дiапазоном ш-дексiв вiд одного до декшькох тисяч i тiльки декшька сотень елементiв е зна-чущими. У цьому випадку матриця, яка складаеться з декшькох мшьйотв елеменлв, на 99,99 % е порожньою, тобто будь-яка традицшна пошукова система для знаходження тих чи шших запиЫв вимагатиме значних затрат часу. Динамiчнi структури даних, серед яких змшаш таблицi зокрема, якраз i призначенi для вирiшення таких неоднозначних ситуащй шляхом ефективно-го обчислення вщповщних iндексiв масиву - одно-, дво- чи багатовимiрного.

2. Особливост1 проектування зм1шаних таблиць

Змiшанi таблищ переважно реалiзують у виглядi одновимiрного масиву фiксованого розмiру [3, ст. 104], елементами якого однозв'язш списки об'ек-тiв, якi вш зберiгатиме, або покажчики на них. У змшаних таблицях iндекс масиву обчислюеться за допомогою функци тдставляння (hash function), яка приймае його ключове значення фiзичного масиву як параметр. При цьому функщя тдставляння мае гарантувати, що повернений нею шдекс знаходи-тиметься в дiапазонi фжсованих меж масиву таблищ. Вона, о^м того, повинна обчислювати шдекси так, щоб вони були рiзними для рiзних ключiв.

У ^eni функцiя пiдставляння нiколи не повинна повертати один i той самий шдекс для двох рiзних ключових значень. Проте, на практищ цей щеал досягти дуже важко (найчастше - неможливо). Часто бувае так, що функщя повертае однаковi значення шдексу для декiлькох ключiв, внаслiдок чого вщ-буваеться 1х зткнення: кожен з ключiв хоче зайняти одну i ту ж саму пози-цiю в таблищ, але мiсце е тiльки для одного. 1снують два критери, як вiдрiз-няють хорошi функци тдставляння вщ поганих. Критерiй швидкостi вказуе на те, що функци тдставляння мають бути дуже швидкими. 1нший критерiй забезпечуе pienoMipnuu розподш шдекЫв по масиву, що знижуе iмовiрнiсть 1х зiткнення. Для пришвидшення пошуку часто використовують лiвостороннi логнормальнi чи будь-як iншi розподiли, якi забезпечують скупчення об'ек^в у змiшанiй таблищ ближче до 11 початку.

Якщо зважити на появу реальних обставин, то потрiбно погодитися з тим, що згткнення ключiв все ж таки школи траплятимуться. Важливою особ-ливiстю проектування змiшаних таблиць е те, що вони мають достойно справлятися з питанням зткнення ключiв. Найчастше зiткнення контролю-ють шляхом зчеплення, тобто кожен об'ект, який претендуе на один i той самий шдекс, мае приеднатися до однозв'язного списку елеменпв. У цьому списку внесет об'екти зазвичай не розташовуються в якомусь певному по-

рядку: додаш останнiми вони можуть знаходитися на його початку. Проте разом з елементом даних у кожному об'екл мае обов'язково збершатися його асоцшований ключ.

Для здшснення пошуку об'екта за певним його ключем, насамперед, застосовують функцiю шдставляння, яка обчислюе iндекс масиву таблищ, а потiм виконують перегляд вщповщного однозв'язного списку на предмет збь гання ключiв. Знаходження у об'екл разом з даними i самого ключа дае змогу збершати повторюваш данi, але самi ключi при цьому повинш бути ушкаль-ними. Змшаш таблицi не розумiють таких вщношень, як "менше", i немае сенсу говорити про "попередне значення". Це означае, що для змшано! таб-лицi немае сенсу писати лератор (покажчик на динамiчнi об'екти) - аналог покажчика на елементи масиву. На рис. 1 показано, як виглядае розташуван-ня об'еклв змшано! таблищ в пам'ят комп'ютера.

Рис. 1. Розташування об^ект1в змшаноХ таблиц в пам 'ятi комп 'ютера:

а) структура об'екта;

б) структура таблиц

Об'ект 4-го однозв'язного списку

Розроблення узагалъненоИ змшаноИ таблиц - не просте завдання. Для розумшня такого процесу розглянемо звичайний шдхщ, зпдно з яким тип ключа передаеться у функщю шдставляння Hash(), яка повертае вщповщне щ-ле значення. Недолжом такого шдходу е не можливiсть узагальнено! змша-но! таблицi обробляти вбудованi типи int або char, оскшьки немае вбудовано! операци Hash(). Окрiм того, виникае запитання: звщки функцiя Hash() може знати, який допустимий дiапазон iндексiв вона може повертати? З програм-но! точки зору це означае таке: якщо об'ект в контейнерi мае дуже багато знати про свою реалiзацiю, то такий контейнер не пристосований для того, щоб бути узагальненим. Тому, зазвичай, змшаш таблицi проектують окремо для ключiв типу int i char*.

З лiтератури [3, ст. 106] вiдомi деякi приклади реалiзацi! змiшаних таблиць, якi, хоча i не е по-справжньому узагальненими, проте вони як шаб-лони проектування можуть достатньо широко застосовуватися у програмних продуктах. Кожна з розглянутих нижче змшаних таблиць базуеться на вико-ристанш специфiчного типу ключа i передбачае власну функцiю шдставляння. Такий шдхщ до !х реалiзацi! е розумним, оскiльки вони часто вимагають спецiального прилаштування до розв'язання конкретних задач.

2.1. Реал1защя зм1шано1 таблиц1 з ключем типу int

Вводячи об'ект (тобто запис, який характеризуе, наприклад, елемент булево! матриц сумiжностi чи iнцидентностi) у змшану таблицю, його необ-хщно явно асоцiювати з унiкальним щлим ключем типу int. Як на перший погляд, то це дещо невдалий пiдхiд. Якщо зважити на те, що змшана таблиця -це одновимiрний масив фiксованого розмiру (див. рис. 1, б), елементами якого

е динамiчний однозв'язний список, то, напевно, для забезпечення ушкальнос-т такого ключа доведеться шдтримувати ще i другу таблицю. Простий вихiд з ще! ситуаци полягае в тому, що необхiдно визначити метод AddHash(), який буде повертати false, якщо ключ повторюеться, i true - у шшому випадку.

У деяких задачах використання пошукових ключiв типу int е дуже простим i природним представленням шдекшв одновимiрного масиву. Вдаа-годжувач, наприклад, повинен умiти знаходити символiчне iм,я за даною ад-ресою або рядок початкового коду за його номером. У таких випадках роз-робниковi програмного забезпечення не доведеться робити щось особливе, щоб генерувати ключi або забезпечити !х унiкальнiсть.

Зовсiм iнакша ситуацiя спостерiгаеться, коли необхiдно представити шдекси двовимiрного масиву, а ще бшьше питань виникае, коли це сто-суеться багатовимiрних масивiв. Проте i у цих випадках е прост та ефективнi рiшення. Наприклад, у двовимiрнiй матрицi розмiром mxn шдекси будь-яко-го И елементу (i-го рядка i j-го стовпця) можна представити через к-ий iндекс елементу одновимiрного масиву. Перетворення двовимiрних шдекЫв у одно-вимiрнi може здшснюватися двома способами: к = (i - 1)n + j - по рядках; к = = (j - 1)m + i - по стовпцях. Аналопчш ди необхiдно виконати i для перетворення шдекЫв елементiв багатовимiрних масивiв у iндекси елементiв одно-вимiрного масиву.

Особливо! уваги заслуговуе робота функци пiдставляння Hash(int). У найпростшому випадку вона може повертати залишок вiд дiлення свого аргументу (тобто шдексу одновимiрного фiзичного масиву) на фжсований роз-мiр масиву таблищ. Така функцiя завжди е роботоздатна, а також задоволь-няе вимогам швидкоди. Але чи забезпечуе вона рiвномiрнiсть розподiлу тд-ставлянь по масиву? Залежить це, насамперед, вщ значень самих ключiв. Якщо ключi розподiлено випадково, то ця функщя не гiрша за будь-яку шшу. Але обставини iнодi складаються не на користь випадкового !х розподiлу.

Наприклад, у багатьох фiзичних масивах адреси !х елеменлв з великою iмовiрнiстю можуть бути кратш чотирьом. Якщо шдекси таких масивiв використовуються як ключ^ а розмiр масиву таблицi кратний чотирьом, то багато елеменлв масиву таблищ можуть залишитися порожнiми (див. рис. 1, б), що - поза сумтвом, поганий результат. Цю ситуащю можна звести нат-вець, примусивши функцiю Hash() змiшувати свш аргумент управо на 2 бгги перед обчисленням залишку вiд дшення. Але можуть iснувати i iншi чинни-ки, якi перешкоджатимуть випадковш поведiнцi ключiв. Загалом, вибiр роз-мiру масиву таблицi як простого числа допомагае мiнiмiзувати поведiнку по-дiбних чинникiв. Для цього необхщно модифiкували параметризований конструктор HashTable() так, щоб вш використовував для задавання розмiру масиву таблицi не свш аргумент, а найменше просте число, яке е бшьшим або дорiвнюе йому. Проведене нами тестування i уточнення функцп шдстав-ляння i розмiру таблицi принесло деякий виграш майже для кожно! дослщжу-вано! змшано! таблицi.

2.2. Реал1зац1я зм1шаноТ таблиц1 з ключем типу char *

Додаючи об'ект у таблицю, необхщно його явно асоцiювати з уткаль-ним рядковим ключем типу char*. Для деяких програмних продукпв, як пра-

цюють з таблицею символiв (наприклад, листами середовища Excel), це е надзвичайно корисним мехашзмом. Та й збереження елеменлв, наприклад, матрицi iнцидентностi не через ïx iндекси, а за допомогою символьних координат дае змогу вилучити операщю перетворення двовимiрниx iндексiв у од-новимiрнi. Загалом, таблиця символiв надае програмi спошб пошуку шфор-мацiï про символ, наприклад, адресу, за його рядковим представленням. Змь шана таблиця з ключем типу char* - природний споЫб реалiзацiï як динамiч-^ï структури даних, так i мехашзму пошуку вiдповiдного об'екта. 1ншою особливютю такоï змiшаноï таблицi е масив елеменлв, розмiр якого може збшьшуватися у мiру додавання об,ектiв. Коли середня довжина однозв'язних спискiв стае надмiрно великою, то розмiр масиву таблищ може збшьшуватися дискретно за деякою закономiрнiстю. У робол [3, ст. 111] зазначено, що вибiр найменшого простого числа, бшьшого вiд подвоеного попереднього розмiру, значно покращуе ефективнiсть роботи змiшаноï таблищ.

Програмна реалiзацiя змiшаноï таблицi припускае, що рядковi ключi залишаються стабшьними, тобто покажчики посилатимуться на одш i тi ж незмiннi рядки протягом вЫе1" тривалостi iснування таблищ. Якщо таке при-пущення е сумшвним, то таблицю потрiбно модифжувати так, щоб вона ро-била власну кошю для кожного ключового рядка i видаляла б його шд час ви-далення вщповщного об'екта або знищення таблицi.

2.3. Особливост програмно'1 реал1заци зм1шаних таблиць

З використанням об'ектно-орiентованого пiдxоду ми розробили проект, який реалiзуе динамiчну структуру даних - змiшанi таблищ для роботи з буле-вими матрицями великих розмiрiв, пошуковими ключами яких е типи int i char. Проект складаеться з таких файшв: штерфейс - у заголовному (*h); реалiзацiï -у початковому (*cpp); основно!" функци. У заголовних файлах мютяться шабло-ни змшаних таблиць з вiдповiдними пошуковими ключами. Дворiвневе клiентське меню, яке знаходиться у основному файл^ дае змогу користувачу вибрати спещальний об'ект (запис) типу tType, який зразу ж заноситься у вщпо-вiдний параметризований конструктор. У раз^ коли метод FindHash() нама-гаеться вiдшукати вщсутнш у таблицi об'ект, то цей тип слугуе як шдикатор "не знайдено". Вибраний користувачем тип tType тдтримуе процедуру кот-ювання об'еклв. Користувач, за бажанням, також може не вказувати розмiр масиву таблищ, який за замовчуванням визначаеться автоматично.

Метод AddHash() виявляе у об'ектах ключ^ як повторюються, i вщмов-ляеться помiщати ix у таблицю. Це означае, що користувач, перед тим, як вносити об'ект, повинен ретельно визначити його ключ. Проте багатократне повторення даних у об'ектах допускаеться.

3. Приклади створення зм1шаних таблиць

Розглянемо процес створення змшаних таблиць з рiзними типами ключiв на деякому конкретному навчальному прикладь Хоча не завжди таю приклади вщповщають реальним шженерним розрахункам, проте ми не на-магатимемося спростувати це твердження, позаяк програма здатна працюва-ти з надзвичайно великими масивами.

¿2 О—

¿3

о— ¿1-

(2\

о—

а2

<я4

а3

а5

а)

¿3 ¿4 ¿5 $6 ^7

в=

1 1 -1 а\

1 1 -1 1 а2

1 -1 1 аъ

1 -1 а4

1 -1 -1 а5

в)

Рис. 2. Функцiонально-логiчне представлення цифрових пристроив:

а - схема логичного пристрою; б - дводольний ор1ентований граф (бюграф); в - матриця тцидентност1 елемент1в

Отож, шд час функщонально-лопчного проектування [1, ст. 33] мо-деллю цифрових пристро!в слугують дводольнi орiентоваm графи (бiографи) з двома тдмножинами вершин (рис. 2, а), як не перетинаються: пiдмножина У1 утворена елементами (на бшьш глибокому рiвнi структурування) i !х з'еднаннями; тдмножина У2 вщповщае сигналам - лопчним змiнним. Ребра такого графу вщображають причинно-наслiдковi зв'язки мiж вершинами вка-заних пiдмножин, якi вiдповiдають статичному (тдмножина У1) i динамiчно-му (тдмножина У2) описам об'еклв. Рiзниця мiж входами i виходами вста-новлюеться за допомогою напрямкiв, прописаних ребрами: вихщний сигнал логiчного елемента виходить iз вщповщно! вершини, а вхщний сигнал мае напрямок до вершини (рис. 2, б). Наведений бюграф можна описати булевою

матрицею В (рис. 2, в), яка вщображае вщношення шцидентност елемеш!в А = \а1,а2,...,ат| i вiдповiдних сигналiв 8 = |£1982,...,8п|:

В = АА х 8 ^ Ъц = аТ х 87, 7 = 1,п; I = 1,т,

де т i п - вiдповiдно кiлькiсть рядкiв i стовпцiв матрищ. Деякi елементи Ъц матрицi дорiвнюють +1, якщо 87 е вхщним сигналом елемента а1 i дорiвню-ють -1, якщо 8ц - вихщний сигнал елемента а;. Ус iншi елементи можуть бути нульовими або не мати значень взагаль

На рiвнi кiлькiсного проектування кожному елементу булево! матрищ або лопчнш змшнш ставиться у вщповщтсть алгебра!чна та iнша кiлькiсна

зм1нна, а лопчн1 в1дношення переходять у кшьюсш, наприклад, р1вняння чи нер1вност1. На кожному шшому piBHi проектування можлив1 описи об'еклв з р1зною ступiнню повноти i узагальнення, оскшьки iснують рiзнi ступенi дета-лiзацii структурних, логiчних i кiлькiсних властивостей i вiдношень. У такiй задачi значнi труднощi виникають пiд час побудови необхщно!" наближено!' моделi, яка б достатньо точно вщображала характеры властивостi об'екив або ix елеменпв на тому чи iншому рiвнi проектування i водночас була б доступною для проведення дослщження.

Наше завдання полягае в тому, щоби за допомогою розробленого програмного проекту представити матрицю iнцидентностi елеменлв (рис. 2, в), тобто реалiзувати змiшану таблицю з ключами типу int та char *. Оскшьки

бюграф, зображений на рис. 2, б, описано матрицею B, тобто двовимiрним масивом, то для реалiзацii змшано! таблиц з ключем типу int необxiдно по-передньо здiйснити перетворення значень шдекЫв двовимiрного масиву у значення шдекшв одновимiрного масиву. Це можна здшснити як по рядках, так i стовпцях (табл.), тобто результати роботи змшано! таблицi мають бути рiзними.

Табл. Перетворення значень шдекЫв двовимiрного масиву B у шдекси

№ з/п Значення шдекшв двовим1рного масиву Значення шдекшв одновим1рного масиву ввдповвдно: Значення елемента bj

i ai j k = (i — 1)n + j ж ж k = (j — 1) m + i

1 5 а5 1 Si 33 5 1

2 1 а_1 2 S2 2 6 1

3 2 а2 2 S2 10 7 1

4 1 а1 3 S3 3 11 1

5 2 а2 3 S3 11 12 1

6 3 аз 4 S4 20 18 1

7 1 а! 6 S6 6 26

8 4 а4 6 S6 30 29 1

9 2 а2 6 S6 14 27

10 3 аз 6 S6 22 28

11 5 а5 6 S6 38 30

12 4 а4 7 S7 31 34

13 2 а2 8 Ss 16 37 1

14 3 аз 8 Ss 24 38 1

15 5 а5 8 Ss 40 40

Примггка: - по рядках; - по стовпця.

З урахуванням вщповщних перетворень, результати роботи розробленого програмного проекту, який реалiзуе змшану таблицю з ключем типу int, мае такий вигляд:

slot #1 - перетворення двовимлрного масиву у однови1^рний по рядках

0: 1:

[1,24] [1,30] [-1,6] [1,3] [1,33] [-1,40] [1,16] [-1,31] [-1,22] [1,10] [-1,38] [-1,14] [1,20] [1,11] [1,2]

slot #2 - перетворення двовимiрного масиву у одновимлрний по стовпцях

0: [-1,30] [-1,27] [1,24] [-1,21] [1,18] [1,12] [1,6] 1: [-1,40] [1,37] [-1,34] [-1,28] [1,7] 2: [1,38] [1,11] [1,5]

Як бачимо, заповнення об'ектами змшано! таблиц у першому випад-ку (slot #1) е бшьш рiвномiрним, нiж у другому (slot #2), що свiдчить про деяк недолiки роботи тако! таблицi.

Результат роботи розробленого програмного проекту, який ре^зуе змшану таблицю з ключем типу char *, мае такий вигляд

slot #3 - занесення значень елемент двовимiрного масиву по рядках

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

0: [-1, S6-a5] [-1, S7-a4] [1, S2-a1 ] [1, S4-a3] [1, S8-a3] 1: [1, S2-a2] [1, S3-a1] [-1, S6-a2] 2: [-1, S8-a5] [1, S5-a4] [1, S3-a2] [-1, S6-a3] 3: [1, S1-a5] [-1, S5-a1] [1, S8-a2]

slot #4 - занесення значень елемент двовимiрного масиву по стовпцях

0: [1, S8-a3] [-1, S7-a4] [-1, S6-a5] [1, S2-a1 ] [1, S4-a3] 1: [1, S3-a1] [1, S2-a2] [-1, S6-a2] 2: [1, S8-a5] [1, S3-a2] [1, S5-a4] [-1, S6-a3] 3: [1, S8-a2] [1, S1-a5] [-1, S5-a1]

Як бачимо, заповнення об'ектами змшано! таблицi у кожному з ви-падкiв е бшьш-менш рiвномiрним, що свiдчить про деяку перевагу викорис-тання ключiв типу char * над ключами типу int. Жирними шрифтом показано мюцезнаходження вщповщного елемента з табл.

Висновки

1. Розглянуто питания застосування динам1чно1 структури даних - змшаних таблиць (hash tables) для роботи з великими масивами, значна бшьшють елемеппв яких не використовуеться або мають фшсоват значення.

2. З'ясовано, змшат таблиц мають здаттсть як компактно збер^ати вщ-повщт об'екти, так i здшснювати ефективний доступ до них, що робить 1х надзвичайно корисними в багатьох ситуацiях, як виникають пiд час розроблення сучасних програмних продукпв.

3. Розглянуто приклади зберiгания об'ектiв, якi представляють елементи матрищ шцидентносп цифрового пристрою, у змшаних таблицях з ключами рiзного типу, що свiдчить про ефективтсть роботи розробленого програмного проекту.

4. Встановлено, завдяки використанню змшаних таблиць пам'ять для зберь гання кожного з об'ектiв (елементiв бшарно! матрицi) видiляеться з пули вшьно! пам'ятi комп'ютера тальки в мiру потреби.

Лiтература

1. Молчанов А. А. Моделирование и проектирование сложных систем. - К.: Выща шк. Головное изд-во, 1988. - 360 с.

2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - СПб.: Питер, 2001. - 460 с.

3. Фридман А., Кландер Л., Михаэлис М., Шильт Х. С/С++. Алгоритмы и приемы программирования. - М.: ООО "Бином-Пресс", 2007. - 560 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.