ДинамичСский массив это: ДинамичСский массив Π΄Π°Π½Π½Ρ‹Ρ…: Ρ‡Ρ‚ΠΎ это, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

тСория Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ – Skillfactory media

Π‘Ρ‚Π°Ρ‚ΡŒΡ посвящСна ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных структур Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅Β β€” динамичСским массивам Π΄Π°Π½Π½Ρ‹Ρ… (dynamic arrays). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ от…

Π‘Ρ‚Π°Ρ‚ΡŒΡ посвящСна ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных структур Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅Β β€” динамичСским массивам Π΄Π°Π½Π½Ρ‹Ρ… (dynamic arrays). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ простых массивов, ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ опрСдСляСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ избавляСт программиста ΠΎΡ‚ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ нСобходимости ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ распрСдСлСниС памяти (языки C, ΠΌΡ‹ смотрим Π² Π²Π°ΡˆΡƒ сторону).

ΠœΡ‹ расскаТСм, для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта структура Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Python с тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния. Π­Ρ‚ΠΈ знания ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ всСм ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ мноТСства Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π° нашСм курсС) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² динамичСскиС массивы

ДинамичСскиС массивы ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ, сколько памяти Π΅ΠΌΡƒ потрСбуСтся Π² Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³ΠΈΠ±ΠΊΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ объСм рСсурсов ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ячСйки. Π­Ρ‚ΠΈ процСссы происходят автоматичСски, поэтому Ρ‚Π°ΠΊΠΈΠ΅ массивы ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ динамичСскими.

Благодаря этой структурС Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² памяти Ρ€ΠΎΠ²Π½ΠΎ Ρ‚ΠΎΡ‚ объСм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для хранСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ критСриям. Π’Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, сколько ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚Β β€” 10, 50, 100? Если ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ Π² ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ сторону, ΠΊΠΎΠ΄ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Если ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сразу Π½Π° 1000 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ), Π±Π΅Π· рСсурсов ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Ρ‹. Однако с использованиСм динамичСских массивов Π²Ρ‹ Π·Π°Π±Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΎΠ±ΠΎ всСх трудностях.

ΠšΡƒΡ€Ρ

Python для Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Авторская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ экспСрта-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. ПослС обучСния Π²Ρ‹ смоТСтС Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сайты. Π‘ΠΊΠΈΠ΄ΠΊΠ° ΠΏΠΎ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄Ρƒ BLOG 5%.

Π£Π·Π½Π°Ρ‚ΡŒ большС

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌΒ β€” это фрагмСнтация памяти. Π’ своСй Ρ€Π°Π±ΠΎΡ‚Π΅ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ситуациСй, ΠΊΠΎΠ³Π΄Π° рСсурсов Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ достаточно, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΠ±ΠΎΠΈΡ‚ΡŒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅ΠΉ Π½ΡƒΠΆΠ΅Π½ ΠΎΠ΄ΠΈΠ½ большой кластСр памяти, Π° свободныС ячСйки ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ распрСдСлСны ΠΏΠΎ нСскольким участкам. ΠŸΡ€ΠΈ использовании динамичСских массивов систСма ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈ ΠΈ эффСктивно освобоТдаСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ.

Вопросы ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ динамичСский массив соотвСтствуСт статистичСскому, открывая ΠΏΡ€ΠΈ этом ряд ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… возмоТностСй. ВрСмя уточнСния ΠΈΠ»ΠΈ измСнСния значСния любого элСмСнта массива Π½Π΅ зависит ΠΎΡ‚ Π΅Π³ΠΎ располоТСния. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ элСмСнтов,Β  врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ возрастаСт Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ прогрСссии, Π° рСсурсы кСша Ρ€Π°ΡΡ…ΠΎΠ΄ΡƒΡŽΡ‚ΡΡ максимально эффСктивно. Π’ΠΎ ΠΆΠ΅ самоС справСдливо для добавлСния ΠΈΠ»ΠΈ удалСния элСмСнтов Π² сСрСдинС массива. На ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ этих ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с элСмСнтами Π² ΠΊΠΎΠ½Ρ†Π΅ массива ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ постоянноС Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ врСмя, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ общая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ остаСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ константы.

Если Π²Ρ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΡ‚ΡƒΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ руководство ΠΏΠΎ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π²Ρ‹ навСрняка сравнитС динамичСскиС массивы со связными списками — ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ содСрТимоС Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ рСсурсов. Однако массивы ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ индСксирования ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ½ΠΈ нСсколько ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ Π² скорости добавлСния Π΄Π°Π½Π½Ρ‹Ρ…Β β€” Ссли Π² спискС достаточно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ссылки, Ρ‚ΠΎ содСрТимоС массива приходится Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π² памяти Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π±ΡƒΡ„Π΅Ρ€Π½Ρ‹Π΅ ΠΎΠΊΠ½Π° (gap buffers) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ (tiered vectors).

Взгляд Π·Π° кулисы

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим, какая ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° стоит Π·Π° всСми этими опСрациями — ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Python создаСт динамичСскиС массивы ΠΈ ΠΊΠ°ΠΊ мСняСт ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€. Для Π½Π°Ρ‡Π°Π»Π° практичСская дСмонстрация этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

import sys # этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для опрСдСлСния Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ объСма, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² памяти

n = 10 # Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

data = [] # создаСм пустой список

for i in range(n):Β 

a = len(data) # количСство элСмСнтов

b = sys. getsizeof(data) # объСм памяти

print (β€˜Length:{0:3d}; Size of bytes:{1:4d}’.format(a, b))

data.append(n) # ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ

ПослС выполнСния ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ (Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² памяти):

По этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Python слСдуСт ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ рСсурсов. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ° содСрТат ΠΏΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ячСйки. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ эти пространства, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΎ Π΅Π΅ рСсурсоСмкости ΠΈ сразу прСдоставляСт Π² Π΄Π²Π° Ρ€Π°Π·Π° большС мСста. Π’ дальнСйшСм ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅Β β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΄Π²ΠΎΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ постоянноС Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ врСмя ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† массива? ПадСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ происходит ΠΊΠ°ΠΊ Ρ€Π°Π· Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ, Π² Π΄Π²Π° Ρ€Π°Π·Π° больший Π±Π»ΠΎΠΊ памяти. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ быстро Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ нСбольшоС количСство рСсурсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΠΉ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Если ΠΆΠ΅ Π΅Π΅ Π°ΠΏΠΏΠ΅Ρ‚ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ расти, ΠΎΠ½Π° обращаСтся Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ всС Ρ€Π΅ΠΆΠ΅.

Алгоритм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° A Π² Π±Π»ΠΎΠΊ B, выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ участок B с Π½ΡƒΠΆΠ½Ρ‹ΠΌ объСмом памяти, Π² соотвСтствии с описанным Π²Ρ‹ΡˆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.
  2. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ B[i] = A[i], i=0,….,n-1, Π³Π΄Π΅ nΒ β€” это Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ послСднСго элСмСнта.
  3. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ A = B.
  4. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π² Π½ΠΎΠ²Ρ‹ΠΉ массив.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, с Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ Python создаСт Π½ΠΎΠ²Ρ‹ΠΉ массив B ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ½ считаСт Π΅Π³ΠΎ массивом A. ИмСнно такая элСгантная ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ снискала этому языку ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ тысяч ΠΈ тысяч программистов ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ.

ΠŸΠ΅Ρ€Π»Π°ΠΌΡƒΡ‚Ρ€ΠΎΠ²Ρ‹Π΅ ΠΏΡƒΠ³ΠΎΠ²ΠΈΡ†Ρ‹

Π§Ρ‚ΠΎ Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с массивами? НапримСр, структура ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ β€œΠΊΡƒΡ‡Π°β€ (heap) позволяСт программисту Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ряду Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ минимальноС.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ β€œΠΊΡƒΡ‡Π°β€ прСдставляСт собой Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ большС Β  Π΄Π²ΡƒΡ… своих наслСдников.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ·Π΅Π» (heap[0]) всСгда оказываСтся самым мСньшим ΠΈΠ· всСго массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€œΠΊΡƒΡ‡ΠΈβ€ ΠΈΠ· тСхничСского описания модуля heapq. heap[k] <= heap[2*k+1] ΠΈ heap[k] <= heap[2*k+2] для всСх k, начиная с нуля.

Бписок доступных Π² Python ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с β€œΠΊΡƒΡ‡Π΅ΠΉβ€ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ наимСньшСго элСмСнта, Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, слияниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… массивов ΠΈ Π΄Ρ€. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ β€œΠΊΡƒΡ‡ΠΈβ€Β  Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π²Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹Ρ… процСссов, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ записи Π΄Π²ΡƒΡ… ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² ΠΈ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² хронологичСском порядкС.

Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ, β€œΠΊΡƒΡ‡Ρƒβ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² массивС, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΠ½Π° оказываСтся ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² этом случаС Π½Π΅ трСбуСтся пространство для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ β€” родитСля ΠΈ Π΅Π³ΠΎ наслСдников ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ арифмСтичСски ΠΏΠΎ индСксам.

Одни ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ β€œΠΊΡƒΡ‡ΠΈβ€ ΠΈ массива.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° вариация структуры Π½Π° основС массива β€” двухсторонняя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (double-ended queue, deque).

Она ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стСка ΠΈ, собствСнно, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя структурами β€” порядок получСния сохранённых Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ Π² Π½Π΅ΠΉ сохранСны (ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ First-In-First-Out). Π’ стСкС β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΊΠ°ΠΊ Π² стопкС ΠΊΠ½ΠΈΠ³ ΠΈΠ»ΠΈ Ρ‚Π°Ρ€Π΅Π»ΠΎΠΊ, свСрху ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ самыС Π½ΠΎΠ²Ρ‹Π΅ элСмСнты (First-In-Last-Out).

Двусторонняя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΎΠ±Π΅ΠΈΡ… сторон массива β€” Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΊΠ°ΠΊ Π² Π½Π°Ρ‡Π°Π»Π΅, Ρ‚Π°ΠΊ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ практичСского примСнСния β€” ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ процСссора формируСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ deque, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ FIFO. Освободившийся процСссор Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π² своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Если ΠΎΠ½Π° пуста, ΠΎΠ½ обращаСтся ΠΊ deque Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ процСссора ΠΈ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ сСбС Π·Π°Π΄Π°Ρ‡Ρƒ, которая стоит Ρ‚Π°ΠΌ послСднСй.

На этом сСгодняшний тСорСтичСский экскурс ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½. НадССмся, Ρ‡Ρ‚ΠΎ эти знания ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Python ΠΈ ΠΏΠΎΠΊΠΎΡ€Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠšΡƒΡ€Ρ

Python для Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Авторская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ экспСрта-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. ПослС обучСния Π²Ρ‹ смоТСтС Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сайты. Π‘ΠΊΠΈΠ΄ΠΊΠ° ΠΏΠΎ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄Ρƒ BLOG 5%.

Π£Π·Π½Π°Ρ‚ΡŒ большС

тСкст: ПомогаСв Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ

#5. ДинамичСский массив. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π½Π° Π²ΠΈΠ΄Π΅ΠΎ

ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ курс ΠΏΠΎ структурам Π΄Π°Π½Π½Ρ‹Ρ…. На этом занятии Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ динамичСских массивах. Π§Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅? На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ с Π²Π°ΠΌΠΈ ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ· сСбя прСдставляСт ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ статичСский массив. Но Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ сущСствСнный нСдостаток – нСизмСняСмоС число элСмСнтов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° создаСтся статичСский массив, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠ°ΠΊ Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, сколько элСмСнтов ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ. Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ Ρ‚ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· этой ситуации Π² ΠΌΠΈΡ€Π΅ программирования появилась Π±ΠΎΠ»Π΅Π΅ гибкая структура Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ массива, Π½ΠΎ с измСняСмым (ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ) числом элСмСнтов.

Π’Π°ΠΊΠΈΠ΅ массивы ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ динамичСскиС.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΎΠ΄ΠΈΠ½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡ… использования. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ просматриваСм Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΈ сохраняСм ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, число Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… дСсятков Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… тысяч. Если Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ статичСским массивом, Ρ‚ΠΎ придСтся Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ число элСмСнтов, скаТСм, Π² 10 000. И это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎΠΌΡƒ расходу памяти. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π²Π·ΡΡ‚ΡŒ динамичСскиС массивы с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² 100 элСмСнтов. А, Π·Π°Ρ‚Π΅ΠΌ, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ этот Ρ€Π°Π·ΠΌΠ΅Ρ€. Π’ΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡ…ΠΎΠ΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΡƒΠ΄Π° экономнСС.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° динамичСского массива

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив с измСняСмым числом элСмСнтов. Для этого Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивом с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, допустим, Π² 10 элСмСнтов:

Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ физичСским, Π° число записанных Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… – логичСским. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этими Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ вводят Π΄Π²Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

currentLength = 7
maxCapacity = 10

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ currentLength содСрТит индСкс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ добавляСмого Π² массив значСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт число ΡƒΠΆΠ΅ записанных Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ maxCapacity Ρ€Π°Π²Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ числу элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ массив dar.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ вставка элСмСнтов Π² массив

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ† этого массива. Π’Π°ΠΊ ΠΊΠ°ΠΊ всС элСмСнты Π² массивах Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ строго Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ с самого Π½Π°Ρ‡Π°Π»Π° Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ пропусков, Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΌ слСдуСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ячСйку с индСксом currentLength:

dar[currentLength] = 8

ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentLength Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ:

currentLength += 1

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния О большого ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ составляСт O(1).

Но это Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ†. А Ρ‡Ρ‚ΠΎ Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, скаТСм, послС пятСрки. Как Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ? Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ статичСском массивС. НСобходимо ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ значСния 6, 7, 8 Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ элСмСнт ΠΈ Π½Π° ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ мСсто ΡˆΠ΅ΡΡ‚Π΅Ρ€ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ вставляСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ currentLength увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ:

Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния О большого составляСт O(n), Π³Π΄Π΅ n – физичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива.

ИзмСнСниС физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° динамичСского массива

Π― Π΄ΡƒΠΌΠ°ΡŽ эти простыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния ΠΈ вставки Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массив, ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ свободноС мСсто, Π²Ρ‹ сСбС Ρ…ΠΎΡ€ΠΎΡˆΠΎ прСдставляСтС. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° всС элСмСнты заняты, Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½?

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ нСсколько Π±Π°ΠΉΡ‚ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт массива ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈ этом вся выдСлСнная ΠΏΠΎΠ΄ массив ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ. К соТалСнию, Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ получится, Ρ‚.ΠΊ. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ячСйки памяти ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ заняты Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ приходится ΠΈΠ΄Ρ‚ΠΈ нСсколько Π±ΠΎΠ»Π΅Π΅ слоТным, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. ВыдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ статичСский массив Π΄Π»ΠΈΠ½ΠΎΠΉ Π² Π΄Π²Π°, Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° больший ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ (Ρ‡Π°Ρ‰Π΅ всСго ΡƒΠ΄Π²Π°ΠΈΠ²Π°ΡŽΡ‚ физичСский Ρ€Π°Π·ΠΌΠ΅Ρ€). Π’ этот Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ всС значСния ΠΈΠ· ΠΏΡ€Π΅ΠΆΠ½Π΅Π³ΠΎ массива, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ currentLength:

Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ О большого составляСт O(n), Π³Π΄Π΅ n – физичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива.

Π”Π°Π»Π΅Π΅, Ссли всС Π½ΠΎΠ²Ρ‹Π΅ элСмСнты Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Ρ‚ΠΎ опСрация удвоСния физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива повторяСтся. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ динамичСского массива.

Π—Π΄Π΅ΡΡŒ Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос, Π·Π°Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ массив Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π² нСсколько Ρ€Π°Π· большС элСмСнтов, Ρ‡Π΅ΠΌ Π² ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ просто Π½Π° ΠΎΠ΄ΠΈΠ½ элСмСнт (ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ число элСмСнтов)? Π—Π°Ρ‡Π΅ΠΌ ΡƒΠ΄Π²Π°ΠΈΠ²Π°Ρ‚ΡŒ? ΠžΡ‚Π²Π΅Ρ‚ прост. Если Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ массива, Ρ‚ΠΎ скорСС всСго Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΈ для Π½ΠΎΠ²ΠΎΠ³ΠΎ массива с ΠΎΠ΄Π½ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтов. А, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ выдСлСния памяти ΠΈ копирования всСх ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²Ρ‹ΠΉ массив снова придСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎΠΌΡƒ расходу процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π›ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива сразу Π² Π΄Π²Π° Ρ€Π°Π·Π° большС ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ создания Π½ΠΎΠ²Ρ‹Ρ… массивов с большими Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² динамичСском массивС

Π˜Ρ‚Π°ΠΊ, с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° динамичСского массива ΠΌΡ‹ с Π²Π°ΠΌΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ слов ΠΏΡ€ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ всС Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‚.ΠΊ. физичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΡ€ΠΈ этом Π½Π΅ мСняСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ здСсь всС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² случаС со статичСскими массивами.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НСт Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Достаточно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentLength Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ всС. ПослСднСго значСния Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ Π±Ρ‹ Π½Π΅Ρ‚. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ составляСт O(1).

НСмного слоТнСС выполняСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π΅ послСднСго). Π’ этом случаС Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ всС элСмСнты ΠΏΡ€Π°Π²Π΅Π΅ удаляСмого Π²Π»Π΅Π²ΠΎ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentLength Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ:

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ составляСт O(n). Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ физичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π΅ мСняСтся, Π΄Π°ΠΆΠ΅ Ссли Ρ€Π°Π½Π΅Π΅ ΠΎΠ½ увСличивался.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡ‚ΠΎΠ³ этого занятия.

ДинамичСский массив – это массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ число своих элСмСнтов Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ДинамичСскиС массивы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° основС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… статичСских массивов ΠΈ хранят Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ области памяти. Благодаря этому доступ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту выполняСтся Π·Π° фиксированноС врСмя с Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ O(1).

Если Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° динамичСского массива нСдостаточно, Ρ‚ΠΎ создаСтся Π½ΠΎΠ²Ρ‹ΠΉ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² нСсколько Ρ€Π°Π· большС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ всСх ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Часто Π΄Π΅Π»Π°ΡŽΡ‚ ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния ΠΈ удалСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов Π² динамичСском массивС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² статичСских массивах. Π Π°Π·Π½ΠΈΡ†Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива. ΠŸΡ€ΠΈ этом Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вставки/удалСния составляСт O(n), Π³Π΄Π΅ n – ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ занятии ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ эту Ρ‚Π΅ΠΌΡƒ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ динамичСскиС массивы Π½Π° языках Python ΠΈ Π‘++.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

#1. О большоС (Big O) — вСрхняя ΠΎΡ†Π΅Π½ΠΊΠ° слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

#2. О большоС (Big O). Π‘Π»ΡƒΡ‡Π°ΠΈ логарифмичСской ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ слоТности

#3. БтатичСский массив. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, Π΅Π³ΠΎ прСимущСства ΠΈ нСдостатки

#4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ статичСских массивов Π½Π° C++

#5. ДинамичСский массив. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

#6. РСализация динамичСского массива Π½Π° Python

#7. РСализация динамичСского массива Π½Π° Π‘++ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ std::vector

#8. ΠžΠ΄Π½ΠΎΡΠ²ΡΠ·Π½Ρ‹ΠΉ список. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

#9. Π”Π΅Π»Π°Π΅ΠΌ односвязный список Π½Π° Π‘++

#10. Двусвязный список. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

#11. Π”Π΅Π»Π°Π΅ΠΌ двусвязный список Π½Π° Π‘++

#12. Двусвязный список (list) Π² STL Π½Π° Π‘++

#13. ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‚ΠΈΠΏΠΎΠ² FIFO ΠΈ LIFO

#14. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ collections.deque Π½Π° Python

#15. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ deque Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ STL языка C++

#16. Π‘Ρ‚Π΅ΠΊ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

#17. РСализация стСка Π½Π° Python ΠΈ C++

#18. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ. Начало

#19. Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. Бпособы ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΈ удалСния Π²Π΅Ρ€ΡˆΠΈΠ½

#20. РСализация Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Π½Π° Python

#21. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° (set). ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ мноТСствами

#22. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° set ΠΈ multiset Π² C++

#23. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ map Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ STL Π² C++

#24. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½ΠΎΠ΅ (Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅, Trie) Π΄Π΅Ρ€Π΅Π²ΠΎ. АссоциативныС массивы

#25. Π₯эш-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π§Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

#26. Π₯эш-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

#27. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации. Π”Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

#28. ИспользованиС Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† Π² Python ΠΈ Π‘++

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… динамичСского массива Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСский массив?

НСдостаток ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… массивов в Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² процСссС выполнСния ΠΊΠΎΠ΄Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ Π½Π΅ смоТСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (n + 1)-ΠΉ элСмСнт, Ссли ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, Ρ€Π°Π²Π½Ρ‹ΠΉ n. Одна ΠΈΠ· ΠΈΠ΄Π΅ΠΉ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ большой массив, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚Ρ€Π°Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объСма памяти. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ являСтся подходящим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Π”ΡƒΠΌΠ°Ρ‚ΡŒ! ΠœΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ идСю динамичСского массива, Π³Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ динамичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ динамичСский массив?

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с массива Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 ΠΈ ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° заканчиваСтся мСсто. Π­Ρ‚ΠΎΡ‚ процСсс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ массива Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… старого массива Π² ниТнюю ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ пространства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ старым массивом. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹, связанныС с этим процСссом, связаны с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ старых Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠΈ. Π’Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΠΉ вопрос: сколько Ρ€Π°Π· Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнт послС n вставок? Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ.

  • ПослС ΠΏΠ΅Ρ€Π²ΠΎΠΉ вставки ΠΌΡ‹ ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² Π½ΠΎΠ²Ρ‹ΠΉ массив. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ 2, Π° Π² массивС ΠΎΠ΄ΠΈΠ½ элСмСнт. Π˜Ρ‚Π°ΠΊ, послС Π²Ρ‚ΠΎΡ€ΠΎΠΉ вставки Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎ 4 ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° элСмСнта Π² Π½ΠΎΠ²Ρ‹ΠΉ массив.
  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ 4, Π° элСмСнтов Π² массивС Π΄Π²Π°, поэтому Π½Π΅Ρ‚ нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива послС 3-ΠΉ вставки. Но послС 4-ΠΉ вставки массив Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎ 8 ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ элСмСнта Π² Π½ΠΎΠ²Ρ‹ΠΉ массив. 9я = ΠΏ => я = logn. Π˜Ρ‚Π°ΠΊ, послС n ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вставки Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива logn Ρ€Π°Π·. Π”ΡƒΠΌΠ°Ρ‚ΡŒ! Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ копирования послС logn количСство ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠΉ = 1 + 2 + 4 + ….. n/4 + n/2 + n

    = n + n/2 + n/4 + … .. + 4 + 2 + 1

    = n (1 + 1/2 + 1/4 + ….. + 4/n + 2/n + 1/n)

    ≀ n (1 + 1/ 2 + 1/4 + ….. + 4/n + 2/n + 1/n + …. Π΄ΠΎ бСсконСчности)

    ≀ n * 1/(1 — 1/2) ≀ 2n

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: 94 + . .. Π΄ΠΎ бСсконСчности = 1/(1 — r)

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для logn количСства вставок (Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ удвоСния) Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 2n ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ копирования. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π½Π΅Ρ‚ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ копирования ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ n — logn вставок. ВсСго ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ копирования Π½Π° вставку = 2n / n = 2. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² срСднСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт n пСрСмСщаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎ являСтся постоянным.

    • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива Π² 2 Ρ€Π°Π·Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ вставка n элСмСнтов Π·Π°ΠΉΠΌΠ΅Ρ‚ Π² Ρ†Π΅Π»ΠΎΠΌ O(n) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая вставка Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ O(1) срСднСго постоянного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ эквивалСнтно ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ситуации с массивом.
    • ΠŸΠΎΡ‡Ρ‚ΠΈ всС запросы Π½Π° вставку Π±ΡƒΠ΄ΡƒΡ‚ быстрыми, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ logn запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ массива. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, частота Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ сцСнария ΠΎΡ‡Π΅Π½ΡŒ высока (n — logn), Π° частота Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠ΅Π³ΠΎ сцСнария Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΎΠΉ (logn). Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ срСдний случай Π±Π»ΠΈΠΆΠ΅ ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ. Π”ΡƒΠΌΠ°Ρ‚ΡŒ!

    Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСского массива ΠΊΠ°ΠΊ абстрактного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° C++ ΠΈΠ»ΠΈ Java ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС программирования Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ:

    • A[] : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив
    • currSize : ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π² динамичСском массивС A[]. Он инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0 Π² Π½Π°Ρ‡Π°Π»Π΅.
    • capacity : ΠžΠ±Ρ‰Π΅Π΅ количСство элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ динамичСский массив A[] ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Он инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 1 Π² Π½Π°Ρ‡Π°Π»Π΅.
    • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ динамичСского массива : вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ динамичСского массива Π² нашСм ΠΊΠΎΠ΄Π΅. Он ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля массива A[], currSize ΠΈ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ.

    ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с динамичСским массивом

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ опрСдСляСм ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с динамичСским массивом для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ нСобходимости.

    • void insertAtEnd(int x): Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† индСкса
    • void reSizeArray(): Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ массива Π²Π΄Π²ΠΎΠ΅
    • void rejectArray(): Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ массива Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ
    • Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒAtMiddle (индСкс int, int x): Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срСдний индСкс
    • void deleteAtEnd(): Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ индСкса
    • void deleteAtMiddle(int index): Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ срСднСго индСкса

    Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ oops ΠΌΡ‹ объявляСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ массива A, currSize ΠΈ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊ частный Β Ρ‡Π»Π΅Π½ класса. Π­Ρ‚ΠΎ инкапсуляция, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ скрываСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ объявляСм конструктор ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ общСдоступных Β Ρ‡Π»Π΅Π½ΠΎΠ² класса. Π­Ρ‚ΠΎ абстракция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ раскрываСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ для внСшнСго ΠΌΠΈΡ€Π°.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ абстракции ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ reSizeArray() ΠΈ shrinkArray() ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² вставки ΠΈ удалСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅Ρ‚ нСобходимости ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ доступ ΠΊ этим ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ. Π”ΡƒΠΌΠ°Ρ‚ΡŒ!

    ПсСвдокод: Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° класса DynamicArray
     ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ класс DynamicArray
    {
    Частный
        ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» А[]
        int currSize
        внутрСнняя Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ
        Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ reSizeArray()
        {
            //Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
        }
        
         Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сТимаСмый массив ()
        {
            // Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
        }
       
    ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ:
        ДинамичСский массив ()
        {
            A = Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» [1]
            курсрсайз = 0
            Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ = 1
        }
        пустота insertAtEnd (Ρ†Π΅Π»ΠΎΠ΅ число x)
        {
            // Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
        }
      
        пустота insertAtMiddle (индСкс int, int x)
        {
            // Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
        }
        Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ deleteAtEnd()
        {
            // Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
        }
      
        Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ deleteAtMiddle (индСкс int)
        {
            // Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
        }
        
        ...//Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с динамичСскими массивами...
    } 

    опСрация resizeArray()

    Π­Ρ‚Π° опСрация трСбуСтся, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ пространство массива заполняСтся с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ послС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ вставки. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° currSize == Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя вставки.

    • ΠœΡ‹ ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ массива ΠΈ объявляСм Π½ΠΎΠ²Ρ‹ΠΉ массив temp[] Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2*Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ.
    • ΠœΡ‹ запускаСм Ρ†ΠΈΠΊΠ» ΠΎΡ‚ i = 0 Π΄ΠΎ Смкости — 1 ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ всС элСмСнты ΠΈΠ· исходного массива A[] Π² Π½ΠΎΠ²Ρ‹ΠΉ массив temp[].
    • ΠœΡ‹ освобоТдаСм пространство, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ A[], ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ temp[].
    • НаконСц, ΠΌΡ‹ ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Смкости.

    РСализация псСвдокода

     void resizeArray()
    {
        Ссли (currSize == ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ)
        {
            ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ [2 * Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ]
            for (int i = 0; i < Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ; i = i + 1)
                Ρ‚Π΅ΠΌΠΏ[я] = А[я]
            бСсплатно(А)
            А = Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°
            Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ = 2 * Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ
        }
    } 

    опСрация insertAtEnd(int x)

    Если (currSize < Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ), , Ρ‚ΠΎ ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ вставляСм элСмСнт с индСксом A[currSize] ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ currSize Π½Π° 1. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС массив заполняСтся своСй Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ resizeArray(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт x ΠΏΠΎ индСксу A[currSize] ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ currSize Π½Π° 1.

    РСализация псСвдокода

     void insertAtEnd(int x)
    {
        Ссли (currSize == ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ)
            ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ()
        A[currSize] = Ρ…
        Ρ€Π°Π·ΠΌΠ΅Ρ€_курса = Ρ€Π°Π·ΠΌΠ΅Ρ€_курса + 1
    } 

    опСрация insertAtMiddle(int index, int x)

    If(currSize == Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ) , Ρ‚ΠΎ ΠΌΡ‹ измСняСм Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ элСмСнты ΠΈΠ· index Π² currSize - 1 Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Π²Π΅Ρ€Ρ…. Π­Ρ‚ΠΎΡ‚ процСсс создаст пространство для вновь ΠΏΡ€ΠΈΠ±Ρ‹Π²ΡˆΠ΅Π³ΠΎ элСмСнта x. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ вставляСм элСмСнт x Π² A[index] ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ currSize Π½Π° 1. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Если (currSize < Смкости), Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива.

    РСализация псСвдокода

     void insertAtMiddle(int index, int x)
    {
        Ссли (currSize == ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ)
            ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ()
                
        for (int i = currSize; i > index; i = i - 1)
            А [я] = А [я - 1]
                
        А [индСкс] = Ρ…
        Ρ€Π°Π·ΠΌΠ΅Ρ€_курса = Ρ€Π°Π·ΠΌΠ΅Ρ€_курса + 1
    } 

    опСрация сТатия()

    ПослС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ удалСния currSize массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, динамичСский массив Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ пространства, Ссли Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡƒΠΏΠ°Π΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1/4 Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Смкости. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ пространства.

    ВыполняСм эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° currSize == capacity/4 ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ.

    • ΠœΡ‹ объявляСм Π½ΠΎΠ²Ρ‹ΠΉ массив temp[] Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ/2.
    • Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ запускаСм Ρ†ΠΈΠΊΠ» ΠΎΡ‚ i = 0 Π΄ΠΎ currSize -1 ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ всС элСмСнты ΠΈΠ· исходного массива A[] Π² массив temp[].
    • ΠœΡ‹ обновляСм Π½ΠΎΠ²ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ Смкости/2, ΠΈ освобоТдаСм пространство, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ A[].
    • НаконСц, ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ A[] Π½ΠΎΠ²Ρ‹ΠΌ массивом temp[].

    РСализация псСвдокода

     void сТимаСмый массив ()
    {
        Ссли (currSize == Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ/4)
        {
            ΠΈΠ½Ρ‚ Ρ‚Π΅ΠΌΠΏ[Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ/2]
            for (int i = 0; i < currSize; i = i + 1)
                Ρ‚Π΅ΠΌΠΏ[я] = А[я]
            ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ = ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ/2
            бСсплатно(А)
            А = Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°
        }
    } 

    опСрация deleteAtEnd()

    Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива. if(currSize == 0) , Ρ‚ΠΎ массив пуст ΠΈΠ»ΠΈ Π² массивС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ элСмСнтов. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ удаляСм элСмСнт с индСксом currSize - 1 ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ currSize Π½Π° 1. Π’ΠΎ врСмя этого процСсса if (currSize == capacity/4) , Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ shrinkArray(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива Π²Π΄Π²ΠΎΠ΅.

    РСализация псСвдокода

     void deleteAtEnd()
    {
        Ссли (currSize == 0)
            print("динамичСский массив пуст!")
        Π΅Ρ‰Π΅
        {
            A[currSize - 1] = INT_MIN
            Ρ€Π°Π·ΠΌΠ΅Ρ€_курса = Ρ€Π°Π·ΠΌΠ΅Ρ€_курса - 1
            Ссли (currSize == Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ/4)
                ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΠΌΠ°ΡΡΠΈΠ²()
        }
    } 

    deleteAtMiddle(int index) опСрация

    Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива. if(currSize == 0) , массив пуст ΠΈΠ»ΠΈ Π² Π½Π΅ΠΌ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ элСмСнтов. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ всС элСмСнты ΠΈΠ· currSize - 1 Π² индСкс Π½Π° 1 Π²Π½ΠΈΠ·, устанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² A[currSize - 1] Ρ€Π°Π²Π½Ρ‹ΠΌ 0 ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ currSize Π½Π° 1. Π’ Ρ…ΠΎΠ΄Π΅ этого процСсса if (currSize == capacity/4 ) , Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ shrinkArray(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива Π²Π΄Π²ΠΎΠ΅.

    РСализация псСвдокода

     void deleteAtMiddle(int index)
    {
        Ссли (currSize == 0)
            print("динамичСский массив пуст!")
        Π΅Ρ‰Π΅
        {
            for (int i = index; i < currSize - 1; i = i + 1)
                А [я] = А [я + 1]
            A[currSize - 1] = INT_MIN
            Ρ€Π°Π·ΠΌΠ΅Ρ€_курса = Ρ€Π°Π·ΠΌΠ΅Ρ€_курса - 1
            Ссли (currSize == Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ/4)
                ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΠΌΠ°ΡΡΠΈΠ²()
        }
        
    } 

    ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ понятия для Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Π² динамичСском массивС!

    • ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ сравнитС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ слоТности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ динамичСского массива Π²Ρ‹ΡˆΠ΅ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивом.
    • ДинамичСский массив
    • поставляСтся со стандартными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных языков программирования. Π’ C++ ΠΎΠ½ называСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Π° Π² Java ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ArrayList ΠΈ Vector.
    • ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ роста для динамичСского массива зависит ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ компромисс Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ памяти, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ распрСдСлитСля памяти ΠΈ Ρ‚. Π΄.
    • Для коэффициСнта роста k срСднСС врСмя Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ вставки составляСт ΠΎΠΊΠΎΠ»ΠΎ k/(kβˆ’1), Π³Π΄Π΅ максимальноС количСство потСрянного пространства составит (kβˆ’1)n.
    • Для простоты Π°Π½Π°Π»ΠΈΠ·Π° ΠΌΡ‹ использовали коэффициСнт роста k = 2. Но Ссли Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ распрСдСлСния ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ совпадСнию, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ значСния коэффициСнта роста, ΠΊΠ°ΠΊ k = 2, ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ памяти ΠΏΡ€ΠΈ динамичСском Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ массива. хотя Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм памяти всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступСн.
    • Π‘Ρ‹Π»ΠΎ нСсколько дискуссий ΠΎΠ± ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… значСниях Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° роста. НСкоторыС экспСрты ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·ΠΎΠ»ΠΎΡ‚ΠΎΠ³ΠΎ сСчСния Π² качСствС Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° роста, Π½ΠΎ библиотСчная рСализация Ρ€Π°Π·Π½Ρ‹Ρ… языков программирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ значСния. Π˜ΡΡΠ»Π΅Π΄ΡƒΠΉ ΠΈ Π΄ΡƒΠΌΠ°ΠΉ!

    ΠΠ°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ!

    ДинамичСскиС массивы, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Excel

    Благодаря Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½ΠΎΠΌΡƒ обновлСнию ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° вычислСний Excel 365 Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массивов стали ΠΎΡ‡Π΅Π½ΡŒ простыми ΠΈ понятными для всСх, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ концСпция Π½ΠΎΠ²Ρ‹Ρ… динамичСских массивов Excel ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваши Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ листы Π±ΠΎΠ»Π΅Π΅ эффСктивными ΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π² настройкС.

    Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива Excel всСгда ΡΡ‡ΠΈΡ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€Π΅Ρ€ΠΎΠ³Π°Ρ‚ΠΈΠ²ΠΎΠΉ Π³ΡƒΡ€Ρƒ ΠΈ экспСртов ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ скаТСт: Β«Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива», ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚: «А Π½Π΅Ρ‚ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ способа?Β».

    Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ динамичСских массивов β€” Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈ Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Благодаря своСй способности Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими значСниями простым способом, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΡƒΠ»ΠΎΠ²ΠΎΠΊ ΠΈ ΠΏΡ€ΠΈΡ‡ΡƒΠ΄, Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Excel ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ ΠΎΡ‚ создания.

    ДинамичСскиС массивы Excel

    ДинамичСскиС массивы β€” это массивы с измСняСмым Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния Π² нСсколько ячССк Π½Π° основС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² ΠΎΠ΄Π½Ρƒ ячСйку.

    Π—Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 30-Π»Π΅Ρ‚Π½ΡŽΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Microsoft Excel ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π» мноТСство ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ β€” ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, ΠΎΠ΄Π½Π° ячСйка. Π”Π°ΠΆΠ΅ с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ячСйку, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π‘ динамичСскими массивами это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ большС Π½Π΅ выполняСтся. Π’Π΅ΠΏΠ΅Ρ€ΡŒ любая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, автоматичСски пСрСносится Π² сосСдниС ячСйки, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ Ctrl + Shift + Enter ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с динамичСскими массивами становится Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ с ΠΎΠ΄Π½ΠΎΠΉ ячСйкой.

    ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΎΡ‡Π΅Π½ΡŒ простым ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ. Допустим, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ чисСл, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для вычислСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ².

    Π’ прСддинамичСских вСрсиях Excel привСдСнная Π½ΠΈΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйки, Ссли Π²Ρ‹ Π½Π΅ Π²Π²Π΅Π΄Π΅Ρ‚Π΅ Π΅Π΅ Π² нСсколько ячССк ΠΈ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Ctrl + Shift + Enter, Ρ‡Ρ‚ΠΎΠ±Ρ‹ явно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ массива:

    =A3:A5*B2:D2

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотритС, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Ρ‚Π° ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Excel 365. Π’Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π΅Π΅ всСго Π² ΠΎΠ΄Π½Ρƒ ячСйку (Π² нашСм случаС B3), Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Enter… ΠΈ вся ΡΡ€ΠΎΡΡ‚ΡŒ сразу заполняСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ:

    Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ячССк ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ называСтся Ρ€Π°Π·Π»ΠΈΠ²ΠΎΠΌ , Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк называСтся Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ разброса.

    Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β€” это Π½Π΅ просто Π½ΠΎΠ²Ρ‹ΠΉ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массивов Π² Excel. По сути, это Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ всСго ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° расчСта. Благодаря динамичСским массивам Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Excel Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ мноТСство Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ стали Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС ΠΈ эффСктивнСС. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ динамичСскиС массивы ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ замСнят ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массивов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вводятся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сочСтания клавиш Ctrl + Shift + Enter.

    Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ динамичСских массивов Excel

    ДинамичСскиС массивы Π±Ρ‹Π»ΠΈ прСдставлСны Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Microsoft Ignite Π² 2018 Π³. ΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Ρ‹ для подписчиков Office 365 Π² январС 2020 Π³. Π’ настоящСС врСмя ΠΎΠ½ΠΈ доступны Π² подписках Microsoft 365 ΠΈ Excel 2021.

    ДинамичСскиС массивы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях:

    • Excel 365 для Windows
    • Excel 365 для Mac
    • Excel 2021
    • Excel 2021 для Mac
    • Excel для iPad
    • Excel для iPhone
    • Excel для ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚ΠΎΠ² Android
    • Excel для Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Android
    • Excel для Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива Excel

    Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Excel 365 Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ 6 Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ массивы ΠΈ выводят Π΄Π°Π½Π½Ρ‹Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк. Π’Ρ‹Π²ΠΎΠ΄ всСгда Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ β€” ΠΊΠΎΠ³Π΄Π° Π² исходных Π΄Π°Π½Π½Ρ‹Ρ… происходит ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ автоматичСски. ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива .

    Π­Ρ‚ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с рядом Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΊΡ€Π΅ΠΏΠΊΠΈΠΌΠΈ ΠΎΡ€Π΅ΡˆΠΊΠ°ΠΌΠΈ. НапримСр, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния, ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ случайныС Ρ†Π΅Π»Ρ‹Π΅ ΠΈ дСсятичныС числа, ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

    НиТС Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ каТдая функция, Π° Ρ‚Π°ΠΊΠΆΠ΅ ссылки Π½Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ руководства:

    1. UNIQUE - ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈΠ· ряда ячССк.
    2. Π€Π˜Π›Π¬Π’Π  β€” Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° основС Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π²Π°ΠΌΠΈ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π².
    3. SORT β€” сортируСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ столбцу.
    4. SORTBY β€” сортируСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΈΠ»ΠΈ массиву.
    5. RANDARRAY β€” Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ массив случайных чисСл.
    6. ΠŸΠžΠ‘Π›Π•Π”ΠžΠ’ΠΠ’Π•Π›Π¬ΠΠžΠ‘Π’Π¬ - Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ список порядковых Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ².
    7. TEXTSPLIT - Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ строки ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ столбцами ΠΈ/ΠΈΠ»ΠΈ строками.
    8. TOCOL β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² ΠΎΠ΄ΠΈΠ½ столбСц.
    9. TOROW - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ»ΠΈ массив Π² ΠΎΠ΄Π½Ρƒ строку.
    10. WRAPCOLS β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строку ΠΈΠ»ΠΈ столбСц Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π½Π° основС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² строкС.
    11. WRAPROWS β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строку ΠΈΠ»ΠΈ столбСц Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π½Π° основС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² столбцС.
    12. TAKE β€” ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство смСТных строк ΠΈΠ»ΠΈ столбцов ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Π° массива.
    13. DROP β€” удаляСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство строк ΠΈΠ»ΠΈ столбцов ΠΈΠ· массива.
    14. EXPAND - ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ массив Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства строк ΠΈ столбцов.
    15. CHOOSECOLS β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ столбцы ΠΈΠ· массива.
    16. CHOOSEROWS β€” ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ строки ΠΈΠ· массива.

    ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ соврСмСнныС Π·Π°ΠΌΠ΅Π½Ρ‹ популярных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Excel, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ входят Π² Π³Ρ€ΡƒΠΏΠΏΡƒ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ всС прСимущСства динамичСских массивов:

    XLOOKUP β€” это Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΅ΠΌΠ½ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ VLOOKUP, HLOOKUP ΠΈ LOOKUP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск ΠΊΠ°ΠΊ Π² столбцах, Ρ‚Π°ΠΊ ΠΈ Π² строках ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

    XMATCH β€” это Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€Π΅Π΅ΠΌΠ½ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MATCH, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта.

    Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива Excel

    Π’ соврСмСнных вСрсиях Excel ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ динамичСского массива Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈ становится Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ для всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ , Π΄Π°ΠΆΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами. ΠŸΡ€ΠΎΡ‰Π΅ говоря, для любой Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния, Excel автоматичСски создаСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ с измСняСмым Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выводятся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Благодаря этой способности ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ чудСса!

    Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСских массивов Π² дСйствии, Π° Ρ‚Π°ΠΊΠΆΠ΅ влияниС динамичСских массивов Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Новая функция динамичСского массива

    Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт, насколько быстрСС ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского массива Excel.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ список ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· столбца, Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ CSE, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ этой. Π’ динамичСском Excel всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, это Π£ΠΠ˜ΠšΠΠ›Π¬ΠΠΠ― Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π² Π΅Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:

    =Π£ΠΠ˜ΠšΠΠ›Π¬ΠΠ«Π™(B2:B10)

    Π’Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π² Π»ΡŽΠ±ΡƒΡŽ ΠΏΡƒΡΡ‚ΡƒΡŽ ячСйку ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Enter. Excel Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ всС Ρ€Π°Π·Π½Ρ‹Π΅ значСния ΠΈΠ· списка ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк, начиная с ячСйки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π²Π²Π΅Π»ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ (Π² нашСм случаС D2). ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ исходных Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ автоматичСски ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. ОбъСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского массива Π² ΠΎΠ΄Π½Ρƒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ

    Если Π½Π΅Ρ‚ возмоТности Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, соСдинитС нСсколько вмСстС! НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС, ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SORT Π²ΠΎΠΊΡ€ΡƒΠ³ FILTER ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    =Π‘ΠžΠ Π’Π˜Π ΠžΠ’ΠšΠ(Π€Π˜Π›Π¬Π’Π (A2:C13, B2:B13=F1, "НСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²"))

    Π“Π΄Π΅ A2:C13 β€” исходныС Π΄Π°Π½Π½Ρ‹Π΅, B2:B13 β€” значСния для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π° F1 β€” ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. ИспользованиС Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского массива вмСстС с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ вычислСний, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² Excel 365, ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π² массивы, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Π°ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈ старыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСстС.

    НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, Π²Π»ΠΎΠΆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ динамичСского массива UNIQUE Π² старый Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ COUNTA:

    =COUNTA(UNIQUE(B2:B10))

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ динамичСскиС массивы

    Если Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ TRIM Π² Π±ΠΎΠ»Π΅Π΅ старой вСрсии, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Excel 2016 ΠΈΠ»ΠΈ Excel 2019, ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ для ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйки:

    =ΠžΠ’Π Π•Π—ΠšΠ(A2:A6)

    Π’ динамичСском Excel ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС ячСйки ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ нСсколько Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5. Π€ΠΎΡ€ΠΌΡƒΠ»Π° Π’ΠŸΠ  для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

    Как всСм извСстно, функция Π’ΠŸΠ  ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния Π½Π° основС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ индСкса столбца. Однако Π² Excel 365 Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ массив Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² столбцов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ совпадСния ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов:

    .

    =Π’ΠŸΠ (F1, A2:C6, {1,2,3}, Π›ΠžΠ–Π¬)

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 6. Π€ΠΎΡ€ΠΌΡƒΠ»Π° ВРАНБПОНБ стала ΠΏΡ€ΠΎΡ‰Π΅

    Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях Excel синтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ВРАНБП Π½Π΅ оставлял мСста для ошибок. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° вашСм листС, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ исходныС столбцы ΠΈ строки, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство пустых ячССк, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ (нСвСроятная опСрация Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… листах!), ввСсти Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ВРАНБП Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl + Shift + Enter, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π€Ρƒ!

    Π’ динамичСском Excel Π²Ρ‹ просто Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π² ΠΊΡ€Π°ΠΉΠ½ΡŽΡŽ Π»Π΅Π²ΡƒΡŽ ячСйку Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Enter:

    =ВРАНБП(A1:B6)

    Π“ΠΎΡ‚ΠΎΠ²ΠΎ!

    Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ заполнСния β€” ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, нСсколько ячССк

    Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π°Π·Π»ΠΈΠ²Π° β€” это Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ динамичСского массива.

    ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ любой ячСйки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Ρ€Π°Π·Π»ΠΈΠ²ΠΎΠ² появляСтся синяя Ρ€Π°ΠΌΠΊΠ°, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ, Ρ‡Ρ‚ΠΎ всС Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ рассчитываСтся ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ячСйкС. Если Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйкС, всС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ исчСзнут.

    Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ разброса β€” Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ, которая Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Тизнь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Excel. РаньшС ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ массива БПП Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡƒΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, Π²ΠΎ сколько ячССк ΠΈΡ… ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ просто Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйку, Π° Excel позаботится ΠΎΠ±ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π°Π·Π»ΠΈΠ²Π°, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка #SPILL. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, ошибка исчСзнСт.

    Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ сброса Excel.

    Бсылка Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π°Π·Π»ΠΈΠ²Π° (символ #)

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ сброса, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ динамичСского массива, помСститС Ρ…ΡΡˆ-Ρ‚Π΅Π³ ΠΈΠ»ΠΈ символ Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΠΈ (#) послС адрСса Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ячСйки Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

    НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько случайных чисСл сгСнСрировано Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ БЛУЧАЙ Π² A2, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ссылку Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ разброса для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Π§Π•Π’Π§Π˜Πš:

    =Π‘Π§Π•Π’Π§Π˜Πš(A2#)

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ значСния Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Ρ€Π°Π·Π»ΠΈΠ²ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

    =БУММ(A2#)

    Π‘ΠΎΠ²Π΅Ρ‚Ρ‹:

    • Π§Ρ‚ΠΎΠ±Ρ‹ быстро ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ Ρ€Π°Π·Π»ΠΈΠ²Π°, просто Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ всС ячСйки Π²Π½ΡƒΡ‚Ρ€ΠΈ синСго поля с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ, ΠΈ Excel создаст для вас ссылку Ρ€Π°Π·Π»ΠΈΠ²Π°.
    • Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ссылки Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ссылка Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π°Π·Π»ΠΈΠ²Π° являСтся динамичСской ΠΈ автоматичСски Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Ρ€Π°Π·Π»ΠΈΠ²Π°.

    НСявноС пСрСсСчСниС ΠΈ символ @

    Π’ динамичСском массивС Excel Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ сущСствСнноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² языкС Ρ„ΠΎΡ€ΠΌΡƒΠ» - Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ символа @, извСстного ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ нСявного пСрСсСчСния .

    Π’ Microsoft Excel нСявноС пСрСсСчСниС β€” это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, сводящСС мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π’ старом Excel ячСйка ΠΌΠΎΠ³Π»Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ для Π½Π΅Π³ΠΎ Π½Π΅ трСбовался ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

    Π’ Π½ΠΎΠ²ΠΎΠΌ Excel всС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива. НСявный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ пСрСсСчСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдотвращСния повСдСния массива, Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ @ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π±Π΅Π· массива Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ Excel.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, взглянитС Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ Π½ΠΈΠΆΠ΅.

    Π’ C2 Π΅ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° динамичСского массива, которая распрСдСляСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ячСйкам:

    =Π£ΠΠ˜ΠšΠΠ›Π¬ΠΠ«Π™(A2:A9)

    Π’ E2 ΠΏΠ΅Ρ€Π΅Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ стоит символ @, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ нСявноС пСрСсСчСниС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ возвращаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

    .

    =@Π£ΠΠ˜ΠšΠΠ›Π¬ΠΠ«Π™(A2:A9)

    Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ НСявноС пСрСсСчСниС Π² Excel.

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° динамичСских массивов Excel

    НСсомнСнно, динамичСскиС массивы β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΉ Excel Π·Π° послСдниС Π³ΠΎΠ΄Ρ‹. Как ΠΈ Ρƒ любой Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ для нас, ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ стороны Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡƒΠ» динамичСских массивов Excel просто ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹!

    ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ

    ДинамичСскиС массивы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ простым способом. Π’ΠΎΡ‚ ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

    • Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ | Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива
    • ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ | Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива
    • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° столбцов ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ: Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ | Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива

    Π ΠΎΠ΄Π½ΠΎΠΉ для всСх Ρ„ΠΎΡ€ΠΌΡƒΠ»

    Π’ динамичСском Excel Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ массивы, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚. Если Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ относится ΠΊ арифмСтичСским опСрациям ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ функциям, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

    Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива

    Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ слоТных Π·Π°Π΄Π°Ρ‡ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСских массивов Excel ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… вмСстС со старыми, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ здСсь ΠΈ здСсь.

    ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ссылки ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹

    Благодаря ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ "ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" Π½Π΅Ρ‚ нСобходимости Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Π·Π½Π°ΠΊΠΎΠΌ $, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ тСхничСски Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° находится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ячСйкС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎ большСй части Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ссылки Π½Π° ячСйки (Ρ‡Ρ‚ΠΎ всСгда Π±Ρ‹Π»ΠΎ источником ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ для Π½Π΅ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ) - Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° динамичСского массива Π² любом случаС Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹!

    ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ динамичСских массивов

    НовыС динамичСскиС массивы β€” это Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π² случаС с любой Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π΅ΡΡ‚ΡŒ нСсколько прСдостСрСТСний ΠΈ сообраТСний, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π°ΠΌ слСдуСт Π·Π½Π°Ρ‚ΡŒ.

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ отсортированы ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом

    Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ разброса, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ динамичСского массива, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отсортирован с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки Excel. Π›ΡŽΠ±Π°Ρ такая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС Β« Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ массива Β». Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡ‚ мСньшСго ΠΊ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘ΠžΠ Π’Π˜Π ΠžΠ’ΠšΠ˜. НапримСр, Ρ‚Π°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

    НСвозмоТно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Ρ€Π°Π·Π»ΠΈΠ²Π°

    Ни ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Ρ€Π°Π·Π»ΠΈΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅: Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ массива. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива CSE Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

    НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Excel

    Π­Ρ‚Π° функция (ΠΈΠ»ΠΈ ошибка?) довольно нСоТиданная. Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Excel, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ разброса Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Excel сдСлаСт это. Но вмСсто Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ #Π ΠΠ—Π›Π˜Π’! ошибка.

    НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Excel Power Query

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌΡƒΠ» динамичСского массива Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π² Power Query. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² сброса вмСстС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Power Query, это Π½Π΅ сработаСт.

    ДинамичСскиС массивы ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массивов CSE

    Π‘ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ динамичСских массивов ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠ°Ρ… Excel:

    1. Dynamic Excel , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ динамичСскиС массивы, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹. Π’ настоящСС врСмя это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Excel 365 ΠΈ Excel 2021.
    2. Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ Excel , Ρ‚Π°ΠΊΠΆΠ΅ извСстный ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ прСддинамичСский Excel, Π³Π΄Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива Ctrl + Shift + Enter. Π­Ρ‚ΠΎ Excel 2019, Excel 2016, Excel 2013 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии.

    Π‘Π°ΠΌΠΎ собой разумССтся, Ρ‡Ρ‚ΠΎ динамичСскиС массивы прСвосходят Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массивов CSE Π²ΠΎ всСх ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ…. Π₯отя Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива сохранСны ΠΈΠ· сообраТСний совмСстимости, Π² дальнСйшСм рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅.

    Π’ΠΎΡ‚ самыС сущСствСнныС отличия:

    • Π€ΠΎΡ€ΠΌΡƒΠ»Π° динамичСского массива вводится Π² ΠΎΠ΄Π½Ρƒ ячСйку ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиши Enter. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΠΎΠΌΠΎΠ΄Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ массива, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Ctrl + Shift + Enter.
    • НовыС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива автоматичСски Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ячСйкам. Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ БПП Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ скопированы Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСсколько Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².
    • Π Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ» динамичСского массива автоматичСски измСняСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² исходном Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ CSE ΡƒΡΠ΅ΠΊΠ°ΡŽΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ссли возвращаСмая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ слишком ΠΌΠ°Π»Π°, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ошибки Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ячСйках, Ссли возвращаСмая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ слишком Π²Π΅Π»ΠΈΠΊΠ°.
    • Π€ΠΎΡ€ΠΌΡƒΠ»Ρƒ динамичСского массива ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ячСйкС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ БПП, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
    • НСвозмоТно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ строки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ„ΠΎΡ€ΠΌΡƒΠ» БПП β€” сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹. Π‘ динамичСскими массивами вставка ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ строк Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

    ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: динамичСскиС массивы Π² ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… вСрсиях Excel

    Когда Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΊΠ½ΠΈΠ³Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ динамичСского массива Π² старом Excel, ΠΎΠ½Π° автоматичСски прСобразуСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ массива, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡƒΡŽ Π² {Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки}. Когда Π²Ρ‹ снова ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ лист Π² Π½ΠΎΠ²ΠΎΠΌ Excel, Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

    Π’ ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… вСрсиях Excel Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива ΠΈ ссылки Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Ρ€Π°Π·Π»ΠΈΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ прСфикс _xlfn, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ эта функция Π½Π΅ поддСрТиваСтся. Π—Π½Π°ΠΊ ссылки Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° разброса (#) замСняСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ANCHORARRAY.

    НапримСр, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Π£ΠΠ˜ΠšΠΠ›Π¬ΠΠΠ― Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π² Excel 2013 :

    Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ» динамичСского массива (Π½ΠΎ Π½Π΅ всС!) Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ свои Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ вСрсии Excel, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ внСсСтС Π² Π½ΠΈΡ… ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ измСнСния. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько слов #ИМЯ? значСния ошибок.

    Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива Excel Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

    Π’ зависимости ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ошибки, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ синтаксис ΠΈΠ»ΠΈ нСдопустимыС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ 3 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС ошибки, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ использовании любой Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива.

    #Π ΠΠ—Π›Π˜Π’! ошибка

    Когда динамичСский массив Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ нСсколько Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π°Π·Π»ΠΈΠ²Π°, #SPILL! Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС ячСйки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Ρ€Π°Π·Π»ΠΈΠ²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пусты. Π§Ρ‚ΠΎΠ±Ρ‹ быстро ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ всС ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ячСйки, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ошибки, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ 9.0291 Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ячСйки .

    Помимо нСпустого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Ρ€Π°Π·Π»ΠΈΠ²Π°, эта ошибка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° Π΅Ρ‰Π΅ нСсколькими ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см.:

    • Ошибка Excel #SPILL β€” ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ исправлСния
    • Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ #Π ΠΠ—Π›Π˜Π’! ошибка с Π’ΠŸΠ , ΠŸΠžΠ˜Π‘ΠšΠŸΠžΠ— Π˜ΠΠ”Π•ΠšΠ‘, Π‘Π£ΠœΠœΠ•Π‘Π›Π˜

    #Π‘Π‘Π«Π›ΠšΠ! ошибка

    Из-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ссылок ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ динамичСскиС массивы Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π° Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹.

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *