﻿   ГРЕШКИ В КОНТРОЛНОТО ПО СОРТИРАНЕ И ТЪРСЕНЕ


1) Във всички варианти, във въпросите от задача 1, в които се среща думата "няколко"

   (в смисъл на масив или списък от "няколко" елемента) и се иска бърз алгоритъм,

   се приема за верен и отговорът "Сортиране чрез вмъкване", ако е сред предложените.

   Намерението на автора на теста е било да се разглеждат само дълги масиви и списъци,

   но думата "няколко" създава впечатление за малък брой елементи, а в този случай

   сортирането чрез вмъкване е по-бързо от много други алгоритми (вкл. бързото сортиране).

   Затова този отговор се приема за верен и носи 1 точка.


2) В решенията на вариант 1, задача 1, въпрос 1 обяснението, 

   че "бързото и пирамидалното сортиране сравняват далечни елементи" е неточно:

   сортирането чрез пряк избор прави същото. Правилното обяснение е, 

   че пирамидалното сортиране прави преходи между далечни елементи,

   докато обхожда някой клон на двоичната пирамида.

   А бързото сортиране е неподходящо, защото не сортира на място.


   Тази неточност не влияе на правилния отговор, нито на оценката.


3) В решенията на вариант 1, задача 1, въпрос 2 няма грешка,

   обаче разликата между сортирането чрез броене и метода на бройните системи

   е доста тънка и трудно може да бъде съобразена за малкото време на контролното.

   Обяснението, че методът на бройните системи "прави няколко паса",

   е вярно, но непълно: така излиза, че той винаги е по-бавният от двата метода.

   В действителност относителната бързина на двата метода зависи от входните данни.

   В конкретната задача по-бързо е сортирането чрез сливане, което се вижда

   от следните примерни входни данни: Нека n = 1000 е дължината на масива;

   r = 32 (дължина на диапазона, ако приемем, че бройките братя и сестри са от 0 до 31);

   k = 5 (броят на двоичните цифри на най-голямата възможна стойност, тоест 31).

   При тези данни времето за сортиране чрез броене е от порядъка на n + r = 1032,

   а пък времето на метода на бройните системи е от порядъка на kn = 5000.

   Тоест методът на бройните системи е около k пъти по-бавен от сортирането чрез броене.

   (При други входни данни неравенството може да обърне посоката си.)


   Разликата между двата метода може да бъде забелязана само след внимателен анализ.

   Затова отговорът "Метод на бройните системи" не води до отнемане на точки.

   Тоест този отговор носи 0 точки.


4) В решенията на вариант 2, задача 1, въпрос 1 има същата неточност като в т. 2.


5) Във вариант 2, задача 1, въпрос 1 има още един верен отговор: сортиране чрез сливане.

   То може да се извърши върху двусвързан списък на място, стига да не използва рекурсия

   (рекурсията ще изразходва памет от порядъка на log n). Итеративният алгоритъм

   имитира рекурсията отдолу нагоре. Обхожда веднъж списъка и слива подсписъци с дължина 1,

   тоест елементи № 1 и № 2, № 3 и № 4, № 5 и № 6... Обхожда списъка втори път

   и слива подсписъците с дължина 2, тоест (1, 2) и (3, 4), (5, 6) и (7, 8)...

   Обхожда списъка трети път и слива подсписъците с дължина 4,

   при четвъртото обхождане слива подсписъците с дължина 8 и тъй нататък:

   при всяко следващо обхождане дължината на подсписъците се удвоява.

   Самото сливане на подсписъците се извършва на място: елементите им се разместват,

   като се борави с указателите.
