Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 4

Автор Π”ΠΆΡƒΠ»ΠΈΠ°Π½ Π‘Π°ΠΊΠ½Π΅Π»Π»

Алгоритм (algorithm) прСдставляСт собой ΠΏΠΎΡˆΠ°Π³ΠΎΠ²ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ выполнСния вычислСний ΠΈΠ»ΠΈ процСсса. Π­Ρ‚ΠΎ достаточно вольноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠΉΠΌΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½Π΅Ρ‡Π΅Π³ΠΎ Π±ΠΎΡΡ‚ΡŒΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ВСрнСмся ΠΊ дням, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… классах ΠΈ рассматривали простоС слоТСниС Π² столбик.

Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ писал Π½Π° доскС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ слоТСния:

45

17+

----

Π° Π·Π°Ρ‚Π΅ΠΌ просил ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎ сСбя Π΄ΡƒΠΌΠ°Π», ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ: Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ со столбца Π΅Π΄ΠΈΠ½ΠΈΡ†, складываСм 5 ΠΈ 7, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 12, пишСм 2 Π² столбцС Π΅Π΄ΠΈΠ½ΠΈΡ†, Π° Π·Π°Ρ‚Π΅ΠΌ 1 пСрСносим Π½Π°Π΄ 4.

1

45

17+

----

62

Π—Π°Ρ‚Π΅ΠΌ складываСм ΠΏΠ΅Ρ€Π΅Π½Π΅ΡΠ΅Π½Π½ΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ с 4 ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ 1, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 6, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈ пишСм ΠΏΠΎΠ΄ столбцом дСсятков. Π’ΠΎΡ‚ ΠΈ получился ΠΎΡ‚Π²Π΅Ρ‚ 62.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ описанный Π²Ρ‹ΡˆΠ΅ Ρ…ΠΎΠ΄ мыслСй прСдставлял собой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ слоТСния. Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», ΠΊΠ°ΠΊ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ числа 45 ΠΈ 17, ΠΎΠ½ просто объяснил ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ слоТСния Π΄Π²ΡƒΡ… чисСл. ВскорС любой ΡƒΡ‡Π΅Π½ΠΈΠΊ, примСняя Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΌΠΎΠ³ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько чисСл, содСрТащих ΠΌΠ½ΠΎΠ³ΠΎ Ρ†ΠΈΡ„Ρ€. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² Ρ‚Π΅ Π΄Π½ΠΈ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π» Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π²Ρ‹ просто складывали числа.

Π’ ΠΌΠΈΡ€Π΅ программирования ΠΌΡ‹ прСдставляСм сСбС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΊΠ°ΠΊ слоТныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… вычислСний. НапримСр, Ссли имССтся массив записСй ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Π΅ΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ покупатСля (скаТСм, Π”ΠΆΠΎΠ½Π° Π‘ΠΌΠΈΡ‚Π° (John Smith)), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° нуТная запись ΠΈΠ»ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΠ½Π΅Ρ† массива. Для вас это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΌΠΈΡ€Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ½ извСстСн ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск (sequential search).

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска элСмСнта "John Smith" Π² нашСм гипотСтичСском массивС. НапримСр, Ссли элСмСнты Π² массивС отсортированы ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска (binary search). Богласно Π΅ΠΌΡƒ, ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ срСдний элСмСнт массива. Π­Ρ‚ΠΎ "John Smith"? Если Π΄Π°, Ρ‚ΠΎ поиск Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. Если элСмСнт мСньшС Ρ‡Π΅ΠΌ "John Smith" (ΠΏΠΎΠ΄ "мСньшС" здСсь понимаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ стоит "Ρ€Π°Π½ΡŒΡˆΠ΅" Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ искомый элСмСнт находится Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ массива, Ссли ΠΆΠ΅ ΠΎΠ½ большС, Ρ‚ΠΎ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π½Π°ΠΌ элСмСнт находится Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ массива. Π”Π°Π»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ (Ρ‚.Π΅. ΠΌΡ‹ снова Π±Π΅Ρ€Π΅ΠΌ срСдний элСмСнт Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ части массива, сравниваСм Π΅Π³ΠΎ с элСмСнтом "John Smith" ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Ρ‚Ρƒ Ρ‡Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ этот элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° элСмСнт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° лСвая Ρ‡Π°ΡΡ‚ΡŒ массива послС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ разбиСния Π½Π΅ окаТСтся пустой.

Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ каТСтся Π±ΠΎΠ»Π΅Π΅ слоТным, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ рассмотрСнный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° For, Π²Ρ‹Π·Π²Π°Π² Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выполнСния Π±ΠΎΠ»Π΅Π΅ слоТный ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск быстрСС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ рСализация ΠΏΡ€ΠΎΡ‰Π΅.

Π§Ρ‚ΠΎ ΠΆ, Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠΈΡ€ Π°Π½Π°Π»ΠΈΠ·Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ постоянно ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ экспСримСнты ΠΈ пытаСмся ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²!

Анализ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

Рассмотрим Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° поиска Π² массивС элСмСнта "John Smith": ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск. ΠœΡ‹ напишСм ΠΊΠΎΠ΄ для ΠΎΠ±ΠΎΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. РСализация простого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² листингС 1.1.

Листинг 1.1. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠΈΠΌΠ΅Π½ΠΈ Π² массивС элСмСнтов


function SeqSearch( aStrs : PStringArray;

aCount : integer; const aName : string5): integer;

var

i : integer;

begin

for i := 0 to pred(aCount) do

if CompareText(aStrs^[i], aName) = 0 then begin

Result := i;

Exit;

end;

Result := -1;

end;


Π’ листингС 1.2 содСрТится ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ слоТного Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска. (ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π² этом ΠΊΠΎΠ΄Π΅. Алгоритм Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся Π² Π³Π»Π°Π²Π΅ 4.)

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

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

Листинг 1.2. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск ΠΈΠΌΠ΅Π½ΠΈ Π² массивС элСмСнтов


function BinarySearch( aStrs : PStringArray;

aCount : integer; const aName : string5): integer;

var

L, R, M : integer;

CompareResult : integer;

begin

L := 0;

R := pred(aCount);

while (L <= R) do begin

M := (L + R) div 2;

CompareResult := CompareText(aStrs^[M], aName);

if (CompareResult = 0) then begin

Result := M;

Exit;

end

else

if (CompareResult < 0) then

L :=M + 1

else

R := M - 1;

end;

Result := -1;

end;


Π’ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ TurboPower Software, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡ€ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Sleuth QA Suite. ВсС ΠΊΠΎΠ΄Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² ΠΊΠ½ΠΈΠ³Π΅, Π±Ρ‹Π»ΠΈ протСстированы ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ StopWatch (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Sleuth QA Suite), Ρ‚Π°ΠΊ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Code Watch (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° использования рСсурсов ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Sleuth QA Suite). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°ΠΆΠ΅ Ссли Ρƒ вас Π½Π΅Ρ‚ своСго ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ тСстированиС ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ врСмя выполнСния. ΠŸΡ€ΠΎΡΡ‚ΠΎ это Π½Π΅ совсСм ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠΎΠ΄ приходится ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ внСсСния Π² ΠΊΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎΠ½ΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ врСмя Π·Π° счСт измСнСния выполняСмого Ρ„Π°ΠΉΠ»Π° Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° нСпосрСдствСнно Π² процСссС выполнСния.

Для тСстирования ΠΈ опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска Π±Ρ‹Π»Π° написана ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. ЀактичСски ΠΎΠ½Π° опрСдСляСт систСмноС врСмя Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ΅Ρ€Π΅Π΄, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈ послС выполнСния ΠΊΠΎΠ΄Π°. По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ вычисляСтся врСмя выполнСния. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² настоящСС врСмя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ стали достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ, Π° часы систСмного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ быстродСйствия ΠΊΠΎΠ΄ выполняСтся нСсколько сот Ρ€Π°Π·, Π° Π·Π°Ρ‚Π΅ΠΌ опрСдСляСтся срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. (ΠšΡΡ‚Π°Ρ‚ΠΈ, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° написана Π² срСдС 32-разрядной Delphi ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ Delphi1, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ для массивов ΠΈΠ· ΠΊΡƒΡ‡ΠΈ, которая ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ‡Π½ΠΎΠ΅ для Delphi1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 64 Кб.)

ЭкспСримСнты ΠΏΠΎ ΠΎΡ†Π΅Π½ΠΊΠ΅ быстродСйствия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами. Π‘Π½Π°Ρ‡Π°Π»Π° для ΠΎΠ±ΠΎΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для поиска Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ "Smith" Π² массивах ΠΈΠ· 100, 1000, 10000 ΠΈ 100000 элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТали искомый элСмСнт. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСрии экспСримСнтов осущСствлялся поиск Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ элСмСнта Π² массивах Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½ΠΎ ΠΏΡ€ΠΈ отсутствии Π² Π½ΠΈΡ… искомого элСмСнта. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ экспСримСнтов ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.1.

Π’Π°Π±Π»ΠΈΡ†Π° 1.1. Π’Ρ€Π΅ΠΌΠ΅Π½Π° выполнСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска



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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слоТнСС. ΠœΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° ΠΎΡ‡Π΅Π½ΡŒ быстрого выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ точности. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ количСством элСмСнтов Π² массивС ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ являСтся Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ. Но ΠΏΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ зависимости.

ЭкспСримСнты Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. ΠŸΡ€ΠΈ этом Π²Ρ€Π΅ΠΌΠ΅Π½Π° выполнСния ΡƒΠΌΠ½ΠΎΠΆΠ°Π»ΠΈΡΡŒ Π½Π° коэффициСнт 100.

Π’Π°Π±Π»ΠΈΡ†Π° 1.2. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ тСстированиС Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска



Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΠΎΠ»Π΅Π΅ достовСрны. Из Π½ΠΈΡ… Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ дСсятикратноС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства элСмСнтов Π² массивС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 0.5). Π­Ρ‚ΠΎ логарифмичСская Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚.Π΅. врСмя Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΡƒ количСства элСмСнтов Π² массивС.

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