Маси́в — впорядкований набір фіксованої кількості однотипних елементів, що зберігаються в послідовно розташованих комірках оперативної пам'яті, мають порядковий номер і спільне ім'я, що надає користувач.
Характеристика масиву
- Розмірність — кількість індексів елемента (одномірний, двовимірний, …, багатовимірний)
- Розмір — загальна кількість елементів у масиві.
- Масиви можуть бути числові, символьні й інших типів.
- У кожній мові є свої правила опису масивів (у мові Бейсик — командою DIM <список масивів>]]).
У програмуванні масив (англ. array) — сукупність елементів одного типу даних, впорядкованих за індексами, які зазвичай репрезентовані натуральними числами, що визначають положення елемента в масиві.
Масив може бути одномірним (вектором), та багатовимірним (наприклад, таблицею), тобто таким, де індексом є не одне число, а кортеж (сукупність) з декількох чисел, кількість яких збігається з розмірністю масиву.
У більшості мов програмування масив є стандартною вбудованою структурою даних.
Переваги та недоліки
Ефективність операцій
Масиви ефективні при звертанні до довільного елементу, яке відбувається за постійний час (O(1)), однак такі операції як додавання та видалення елементу, потребують часу O(n), де n — розмір масиву. Тому масиви переважно використовуються для зберігання даних, до елементів яких відбувається довільний доступ без додавання або видалення нових елементів, тоді як для алгоритмів з інтенсивними операціями додавання та видалення, ефективнішими є зв'язані списки.
Збереження в пам'яті
Інша перевага масивів, яка є досить важливою — це можливість компактного збереження послідовності їхніх елементів у локальній області пам'яті (що не завжди вдається, наприклад, для зв'язаних списків), що дозволяє ефективно виконувати операції з послідовного обходу елементів таких масивів.
Масив є дуже економною щодо пам'яті структурою даних. Для збереження 100 цілих чисел у масиві необхідно рівно в 100 разів більше пам'яті, ніж для збереження одного числа (плюс, можливо, ще декілька байтів). Водночас, усі структури даних, які базуються на вказівниках, потребують додаткової пам'яті для збереження самих вказівників разом з даними. Однак, операції з фіксованими масивами ускладнюються тоді, коли виникає необхідність додавання нових елементів у вже заповнений масив. Тоді його необхідно розширювати, що не завжди можливо і для таких задач слід використовувати зв'язані списки, або динамічні масиви.
Індекси в масивах
У випадках, коли розмір масиву є досить великий та використання звичайного звертання за індексом стає проблематичним, або великий відсоток його комірок не використовується, слід звертатися до асоціативних масивів, де проблема індексування великих обсягів інформації вирішується більш оптимально.
З тієї причини, що масиви мають фіксовану довжину, слід дуже обережно ставитися до процедури звертання до елементів за їхнім індексом, тому що намагання звернутися до елемента, індекс якого перевищує розмір такого масива (наприклад, до елемента з індексом 6 у масиві з 5 елементів), може призвести до непередбачуваних наслідків.
Слід також бути уважним щодо принципів нумерації елементів масиву, яка в одних мовах програмування може починатись з 0, а в інших — з 1.
Зберігання багатовимірних масивів
Збереження одновимірного масиву в пам'яті є тривіальним, тому що сама пам'ять комп'ютера є одновимірним масивом. Для збереження багатовимірного масиву ситуація ускладнюється. Припустимо, що ми хочемо зберігати двовимірний масив такого вигляду:
Найпоширеніші способи його організації в пам'яті такі:
- Розташування «рядок за рядком». Це найуживаніший на сьогодні спосіб, який зустрічається в більшості мов програмування.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- Розташування «стовпчик за стовпчиком». Такий метод розташування масивів використовується, зокрема, у мові програмування Fortran
1 | 4 | 7 | 2 | 5 | 8 | 3 | 6 | 9 |
- Масив з масивів. Багатовимірні масиви репрезентуються одновимірними масивами вказівників на одновимірні масиви. Розташування може бути як «рядок за рядком» так і «стовпчик за стовпчиком».
Перші два способи дозволяють розміщувати дані компактніше (мають більшу локальність), однак це одночасно і обмеження: такі масиви мають бути «прямокутними», тобто кожний рядок повинен містити однакову кількість елементів. Розташування «масив з масивів», з іншого боку, не дуже ефективне щодо використання пам'яті (необхідно зберігати додатково інформацію про вказівники), але знімає обмеження на «прямокутність» масиву.
Див. також
Джерела
- Дональд Кнут. Fundamental Algorithms // The Art of Computer Programming. — 3rd. — Massachusetts : Addison–Wesley, 1997. — Т. 1. — 650 с. — .(англ.)
- Т. Кормен; Ч. Лейзерсон; Р. Рівест; К. Стайн (2009) [1990]. 2 Загальні засади. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Masiv Masi v vporyadkovanij nabir fiksovanoyi kilkosti odnotipnih elementiv sho zberigayutsya v poslidovno roztashovanih komirkah operativnoyi pam yati mayut poryadkovij nomer i spilne im ya sho nadaye koristuvach Harakteristika masivuRozmirnist kilkist indeksiv elementa odnomirnij dvovimirnij bagatovimirnij Rozmir zagalna kilkist elementiv u masivi Masivi mozhut buti chislovi simvolni j inshih tipiv U kozhnij movi ye svoyi pravila opisu masiviv u movi Bejsik komandoyu DIM lt spisok masiviv gt U programuvanni masiv angl array sukupnist elementiv odnogo tipu danih vporyadkovanih za indeksami yaki zazvichaj reprezentovani naturalnimi chislami sho viznachayut polozhennya elementa v masivi Masiv mozhe buti odnomirnim vektorom ta bagatovimirnim napriklad tabliceyu tobto takim de indeksom ye ne odne chislo a kortezh sukupnist z dekilkoh chisel kilkist yakih zbigayetsya z rozmirnistyu masivu U bilshosti mov programuvannya masiv ye standartnoyu vbudovanoyu strukturoyu danih Perevagi ta nedolikiEfektivnist operacij Masivi efektivni pri zvertanni do dovilnogo elementu yake vidbuvayetsya za postijnij chas O 1 odnak taki operaciyi yak dodavannya ta vidalennya elementu potrebuyut chasu O n de n rozmir masivu Tomu masivi perevazhno vikoristovuyutsya dlya zberigannya danih do elementiv yakih vidbuvayetsya dovilnij dostup bez dodavannya abo vidalennya novih elementiv todi yak dlya algoritmiv z intensivnimi operaciyami dodavannya ta vidalennya efektivnishimi ye zv yazani spiski Zberezhennya v pam yati Insha perevaga masiviv yaka ye dosit vazhlivoyu ce mozhlivist kompaktnogo zberezhennya poslidovnosti yihnih elementiv u lokalnij oblasti pam yati sho ne zavzhdi vdayetsya napriklad dlya zv yazanih spiskiv sho dozvolyaye efektivno vikonuvati operaciyi z poslidovnogo obhodu elementiv takih masiviv Masiv ye duzhe ekonomnoyu shodo pam yati strukturoyu danih Dlya zberezhennya 100 cilih chisel u masivi neobhidno rivno v 100 raziv bilshe pam yati nizh dlya zberezhennya odnogo chisla plyus mozhlivo she dekilka bajtiv Vodnochas usi strukturi danih yaki bazuyutsya na vkazivnikah potrebuyut dodatkovoyi pam yati dlya zberezhennya samih vkazivnikiv razom z danimi Odnak operaciyi z fiksovanimi masivami uskladnyuyutsya todi koli vinikaye neobhidnist dodavannya novih elementiv u vzhe zapovnenij masiv Todi jogo neobhidno rozshiryuvati sho ne zavzhdi mozhlivo i dlya takih zadach slid vikoristovuvati zv yazani spiski abo dinamichni masivi Indeksi v masivah U vipadkah koli rozmir masivu ye dosit velikij ta vikoristannya zvichajnogo zvertannya za indeksom staye problematichnim abo velikij vidsotok jogo komirok ne vikoristovuyetsya slid zvertatisya do asociativnih masiviv de problema indeksuvannya velikih obsyagiv informaciyi virishuyetsya bilsh optimalno Z tiyeyi prichini sho masivi mayut fiksovanu dovzhinu slid duzhe oberezhno stavitisya do proceduri zvertannya do elementiv za yihnim indeksom tomu sho namagannya zvernutisya do elementa indeks yakogo perevishuye rozmir takogo masiva napriklad do elementa z indeksom 6 u masivi z 5 elementiv mozhe prizvesti do neperedbachuvanih naslidkiv Slid takozh buti uvazhnim shodo principiv numeraciyi elementiv masivu yaka v odnih movah programuvannya mozhe pochinatis z 0 a v inshih z 1 Zberigannya bagatovimirnih masivivZberezhennya odnovimirnogo masivu v pam yati ye trivialnim tomu sho sama pam yat komp yutera ye odnovimirnim masivom Dlya zberezhennya bagatovimirnogo masivu situaciya uskladnyuyetsya Pripustimo sho mi hochemo zberigati dvovimirnij masiv takogo viglyadu 1 2 3 4 5 6 7 8 9 displaystyle begin bmatrix 1 amp 2 amp 3 4 amp 5 amp 6 7 amp 8 amp 9 end bmatrix Najposhirenishi sposobi jogo organizaciyi v pam yati taki Roztashuvannya ryadok za ryadkom Ce najuzhivanishij na sogodni sposib yakij zustrichayetsya v bilshosti mov programuvannya 1 2 3 4 5 6 7 8 9 Roztashuvannya stovpchik za stovpchikom Takij metod roztashuvannya masiviv vikoristovuyetsya zokrema u movi programuvannya Fortran 1 4 7 2 5 8 3 6 9 Masiv z masiviv Bagatovimirni masivi reprezentuyutsya odnovimirnimi masivami vkazivnikiv na odnovimirni masivi Roztashuvannya mozhe buti yak ryadok za ryadkom tak i stovpchik za stovpchikom Pershi dva sposobi dozvolyayut rozmishuvati dani kompaktnishe mayut bilshu lokalnist odnak ce odnochasno i obmezhennya taki masivi mayut buti pryamokutnimi tobto kozhnij ryadok povinen mistiti odnakovu kilkist elementiv Roztashuvannya masiv z masiviv z inshogo boku ne duzhe efektivne shodo vikoristannya pam yati neobhidno zberigati dodatkovo informaciyu pro vkazivniki ale znimaye obmezhennya na pryamokutnist masivu Div takozhZv yazanij spisok Asociativnij masiv AvtovivifikaciyaDzherelaDonald Knut Fundamental Algorithms The Art of Computer Programming 3rd Massachusetts Addison Wesley 1997 T 1 650 s ISBN 0 201 89683 4 angl T Kormen Ch Lejzerson R Rivest K Stajn 2009 1990 2 Zagalni zasadi Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4