З того, що я бачив, здається, що в формальній освіті з інформатики дуже багато наголошується на нотації та складності часу та складності пам’яті ... однак, будучи самоучкою, це сприйняття базується на тому, щоб слухати і читати, що люди з такою освітою сказати і написати.
Хоча я вважаю, що загальні ідеї та концепції є важливими, я не вважаю, що формалізація їх (таких як нотація великого розміру та різноманітна термінологія) має значення майже так само, за винятком цілей спілкування. Тільки тому, що хтось не знайомий з офіційними позначеннями та термінологією, це не означає, що вони не бачать, як і чому один алгоритм був би швидшим, ніж інший у конкретному випадку. Люди можуть бачити, що час, який потрібен на пошук збалансованого бінарного дерева, стосується логарифму бази вузлів 2-го числа, не спершу дізнавшись про теорію складності в будь-якому формальному розумінні, якщо вони розуміють, як працює дерево, і розуміють високий рівень шкільна математика. Важливо знати, коли слід звернути увагу на складність та використання пам’яті, а також врахувати типові та найгірші випадки… але деякі люди цього не роблять.
Позначення та термінологія набувають важливого значення для спілкування. Вони дають хороший спосіб донести кількісну оцінку продуктивності алгоритму комусь іншому. Оскільки це часто з’являється в документах та поясненнях, корисно мати принаймні розпливчасте розуміння цього, щоб їх було легше слідувати.
Так, так, поняття важливі (хоча менше, коли ресурсів і часу достатньо, але даних немає). Але хоча поняття важливі, формалізація їх часто не така важлива - і потрібно пам’ятати, що позначення та термінологія не є такими ж, як самі поняття.
Редагувати:
Я б не стверджував, що розумію ці поняття так само детально, як хтось, хто офіційно вивчав, але багато загальних ідей просто мають сенс. Я думаю, що в цьому формально це вивчається, але деякі з цих цінностей все ще можуть існувати без.
Що стосується впровадження понять (поза формальним вивченням), я думаю, що вдалий початок - це спонукати людей задуматися про те, яка кількість пам'яті накладні структури даних, які кроки містять алгоритми та як ці речі змінюються за допомогою різних даних.
Це також допомагає розглянути гіпотетичні ситуації та зміни, як, наприклад, врахувати, що відбувається, якщо дерево збалансоване порівняно з тим, що відбувається, якщо воно є максимально незбалансованим, або скільки рівнів у дереві було б більшості вузлів, або скільки ще вузлів може утримуйте, якщо глибина збільшується на один рівень. Такий спосіб мислення, як правило, корисний для програмістів у будь-якому випадку, а не лише при розгляді складності; і якщо застосовуватись до роздумів про те, як алгоритми та структури даних працюють за різних обставин, це, природно, вказує в тому ж напрямку, як і формальне вивчення складності.
O(n^2)
означає.