Чому я можу переглянути графік і відразу знайти найближчу точку до іншої точки, але це потребує часу O (n) через програмування?


122

Дозвольте уточнити:

З огляду на розкид деякої кількості точок n, якщо я хочу подумки знайти найближчу точку до будь-якої точки сюжету, я можу негайно ігнорувати більшість точок на графіку, звужуючи свій вибір до деякої невеликої постійної кількості точок поблизу .

Однак у програмуванні, заданому набором точок n, для того, щоб знайти найближчу точку до будь-якої, потрібно перевірити кожну іншу точку, яка становить час.O(n)

Я здогадуюсь, що візуальний приціл графіка, ймовірно, еквівалент якоїсь структури даних, яку я нездатний зрозуміти; тому що з програмуванням, перетворюючи точки на більш структурований метод, такий як квадратур, можна знайти найближчі точки до точок за за час або аммортизувати час.n k log ( n ) O ( log n )knklog(n)O(logn)

Але досі невідомі амортизовані алгоритми (які я можу знайти) для точкового пошуку після реструктуризації даних.O(1)

То чому, здається, це можливо за допомогою простого візуального огляду?


36
Ви усвідомлюєте всі моменти вже і орієнтовно, де вони знаходяться; "драйвери програмного забезпечення" для ваших очей вже зробили для вас важку роботу з інтерпретації зображення. У своїй аналогії ви вважаєте цю роботу "безкоштовною", коли насправді її немає. Якщо ви вже мали структуру даних, яка розбила позиції точок на якесь представлення октотре, ви могли б зробити набагато краще, ніж O (n). Дуже багато попередньої обробки відбувається в підсвідомому відділі вашого мозку до того, як інформація навіть досягне свідомої частини; ніколи не забувайте, що в подібних аналогіях.
Річард Тінгл

20
Я думаю, що принаймні одне з ваших припущень взагалі не відповідає. припустимо всі точки, розташовані на колі з «малими» збуреннями, а 1 додаткова точка P є центром кола. Якщо ви хочете знайти найближчу точку до P, ви не можете відхилити жодну з інших точок на графіку.
колапс

4
Тому що наш мозок справді дивовижний! Здається, дешева відповідь, але це правда. Ми дійсно не знаємо багато про те, як працює наша (мабуть, паралельно) обробка зображень.
Карл Віттофт

7
Ну, в основному, ваш мозок використовує розділення простору, не помічаючи. Те, що це з’являється дуже швидко, не означає, що це постійний час - ви працюєте з деякою обмеженою роздільною здатністю, і ваше програмне забезпечення для обробки зображень призначене для цього (і навіть може обробляти все це паралельно). Той факт, що ви використовуєте сто мільйонів маленьких процесорів для попередньої обробки, не ставить вас у - це просто робить складну операцію на багатьох маленьких процесорах. І не забувайте, змови в 2D паперу - це сам по собі має , принаймні . O ( n )O(1)O(n)
Луань

9
Не впевнений, чи про це вже згадувалося, але людський мозок працює зовсім інакше від обчислювальної системи типу SISD фон Неймана. Особливо актуальним тут є те, що, як я розумію, людський мозок за своєю суттю паралельний, і особливо це стосується переробки сенсорних подразників: ви можете чути, бачити і відчувати багато речей одночасно і бути (приблизно, все одно) в курсі всіх їх одночасно. Я зосереджуюсь на написанні коментаря, але бачу свій стіл, банку соди, піджак, який висить на дверях, ручку на моєму столі і т. Д. Ваш мозок може перевірити багато точок одночасно.
Patrick87

Відповіді:


115

Ваша модель того, що ви робите подумки, неправильна. Насправді ви працюєте в два етапи:

  1. Усуньте всі точки, які занадто далеко, за час.O(1)
  2. Виміряйте точок, приблизно таких як близько, за час.Θ ( m )mΘ(m)

Якщо ви грали в такі ігри, як петанк (миски) або керлінг, це має бути знайомим - вам не потрібно обстежувати предмети, які знаходяться дуже далеко від цілі, але, можливо, вам потрібно буде виміряти найближчих суперників.

Щоб проілюструвати цю точку, яка зелена крапка найближча до червоної точки? (Тільки на трохи більше 1 пікселя, але є один, який є найближчим.) Щоб полегшити роботу, точки навіть були кольорово кодовані на відстані.

хмара точок

Ця картинка містить балів, які майже на колі, і зелених точок. Крок 1 дозволяє вам усунути всі, окрім точок, але для кроку 2 потрібно перевірити кожну з точок. Немає апріорної межі для .n 10 m m mm=10n10mmm

Фізичне спостереження дозволяє зменшити розмір проблеми з усього набору точок до обмеженого набору кандидатів з точок. Цей крок не є етапом обчислення, як прийнято розуміти, оскільки він заснований на безперервному процесі. Безперервні процеси не піддаються звичній інтуїції щодо обчислювальної складності і, зокрема, асимптотичному аналізу.мnm

Ви можете запитати, чому не може безперервний процес повністю вирішити проблему? Як доходить до цих точок, чому ми не можемо уточнити процес, щоб отримати ?m = 1mm=1

Відповідь полягає в тому, що я трохи обдурив: я представив набір точок, який генерується, складається з майже найближчих точок і точок, які знаходяться далі. Взагалі, для визначення того, які точки лежать в точній межі, потрібно точне спостереження, яке потрібно проводити по пункту. Грубий процес усунення дозволяє виключити безліч очевидних не-кандидатів, але просто вирішити, які кандидати залишилися, потрібно їх перерахувати.n - mmnm

Можна моделювати цю систему в дискретному, обчислювальному світі. Припустимо, що точки представлені у структурі даних, яка сортує їх у комірки в сітці, тобто точка зберігається у списку для комірки . Якщо ви шукаєте точки, найближчі до а комірка, яка містить цю точку, містить щонайменше ще одну точку, тоді достатньо перевірити, що містить комірку та 8 сусідніх комірок. Загальна кількість балів у цих 9 клітинах становить . Ця модель поважає деякі ключові властивості людської моделі:( x , y ) ( x 0 , y 0 ) m(x,y)(x,y)(x0,y0)m

  • m потенційно не обмежений - завжди можливий вироджений гірший випадок, наприклад, точки, що лежать майже на колі.
  • Практична ефективність залежить від того, що ви вибрали шкалу, яка відповідає даним (наприклад, ви нічого не заощадите, якщо ваші точки знаходяться на аркуші паперу, а ваші клітини шириною 1 км).

9
Більше того, не всі графіки можна спроектувати на рівнину так, щоб евклідові відстані відповідали відстаням у графіку (наприклад, якщо ваги ребер не утворюють метрику).
Рафаель

5
@Raphael Я зрозумів, що питання стосується обчислювальної геометрії, а не теорії графів, але насправді це додаткове ускладнення.
Жиль

2
@Gilles Готово . Я щойно засвоїв термін обчислювальна геометрія .
gerrit

2
Це може бути ніт-підбір, я можу зрозуміти, що ви намагаєтесь показати, але як той, хто кольоровим сліпом "вибирає найближчий зелений до червоного", призводить до того, що голова дряпається, які саме точки є. Просто над чим подумати в майбутньому - вибирайте будь-які інші поєднання кольорів, крім червоного / зеленого!
tpg2114

3
@ tpg2114 Не забувайте, що червоний / зелений - не єдиний тип дальтонізму. Показ його з формою (або будь-яким атрибутом, окрім кольору) був би ще більш включним, ніж "будь-які інші поєднання кольорів, крім червоного / зеленого".
Джонатан Ван Матре

42

Причина полягає в тому, що дані введені в "структуру даних", оптимізовану для цього запиту, і що час попередньої обробки при підготовці графіка повинен бути включений у ваші виміряні рази, пропорційні кількості крапок, даючи O (n) складність прямо там.

Якщо ви помістите координати в таблицю з переліком координат X і Y кожної точки, вам знадобиться набагато більше розумових зусиль для обчислення відстаней між точками, сортування списку відстаней і вибору найменшої.

Як приклад запиту, який не працює візуально, було б подивитися на нічне небо і - виходячи лише з вашого погляду та таблиці координат кожної зірки - знайти найближчу до Землі зірку або який астрологічний знак має найменшу відстань між зірки, з яких він складається. Тут вам знадобиться масштабувана і поворотна 3D-модель, щоб визначити це візуально, де комп'ютер вважав би це по суті тією ж проблемою, що і ваш оригінал.


2
+1 - я прокручував униз, шукаючи когось саме цього. Представлення вхідних даних важливо - просто спробуйте знайти медіану відсортованого списку проти несортованої!
cloudfeet

21

Це запитання починається з несправної передумови. Ви просто думаєте, що можете подумки знайти найближчу точку в точці , але насправді, якщо не можете. Це так, тому що ви звикли мати справу з дуже маленькими графіками, але невеликі приклади можуть вводити в оману, коли ми маємо справу з асимптотичною складністю. Якби ви спробували це зробити за допомогою сюжетного розбиття з мільярдом точок, ви швидко виявите, що не можете цього зробити за час.O ( 1 )O(1)O(1)


8
Уявіть, що розмістите мільярд точок по колу, але все трохи потурбується, тому ваші точки утворюють нечітке кільце. Щоб оком знайти точку, найближчу до центру, я не бачу, як можна зробити набагато краще, ніж перевіряти всі точки один за одним.
Нік Алгер

4
@NickAlger Отже, це більше схоже O(numberOfPointsAboutTheSameDistanceFromTheTargetPointAsTheClosestPoint), що не обов'язково пов'язане з цим n. Так чи інакше, я думаю, що відповідь на це має представити можливі структури даних з точки зору того, як людський розум сприймає і запитує його. Просто кажучи, що не O (1) відчуває себе лінивим? неадекватний?
Герцогство

5
@Dukeling O (щось) відноситься до найгіршого випадку. Якщо є якісь макети, де людський мозок не може це робити постійно, то це точно не O (1). Якщо є деяка межа X, де людський мозок може обробляти X точки за постійний час, але взагалі не може обробити X * 2 бали - тоді це не O (1).
Петріс

3
@Dukeling Це обов'язково залежить від n, оскільки в гіршому випадку він дорівнює n, і якщо ви дали n довільних очок, ви повинні розраховувати, що це може бути неможливо зробити швидше, ніж C * n операцій.
Петріс

2
@ Петерис Я думаю, ми не згодні з тим, що означає бути "обов'язково залежним від n" і як визначити найближчу верхню межу.
Герцогство

15

Переваги візуального огляду залежать від важливих приміщень, що в цілому не можна гарантувати:

  • O(n)

  • підрахунок : (див. коментар Ніка Алджера на відповідь, отриману від DW) припустимо, що кількість балів перевищує кількість ваших клітин сітківки - ви навіть не визначите всіх задіяних пунктів.

  • дисперсія : (див. коментар Ніка Алджера щодо відповіді, отриманої від DW) припускають набір точок на звичайній (наприклад, шестикутній) сітці, яка зазнає невеликих випадкових збурень. якщо ці збурення стануть меншими за роздільну здатність сітківки (або будь-якої іншої накладеної сітки), ви не тільки будете сильно натискати на виявлення фактичної мінімальної відстані, але вибираєте неправильні пари точок з високою ймовірністю.

O(n)O(1)


1
O(n)O(log(n))

O(n)nO(nlogn)n

15
  1. Комп’ютер вирішує іншу проблему. Він займає список балів, а не растроване зображення очок. Перетворення зі списку на зображення, тобто "складання" балів, вимагає O(n)часу.

    Швидкий! Найближчий до (1,2):

    • (9, 9)
    • (5, 2)
    • (3, -2)
    • (4, 3)
    • (0, 4)
    • (1, 9)

    Набагато складніше, правда? Б'юсь об заклад, якби я склав цей список удвічі довше, вам доведеться виконати вдвічі більше роботи.

  2. Ви не усвідомлюєте, скільки роботи робить ваш мозок. Ви не просто «знаєте», який момент ближче. Ваш мозок проводить обчислювальну роботу, щоб з'ясувати цю відповідь і зробити її доступною. Мозок працює над кожною точкою паралельно, тому час на закінчення залишається приблизно однаковим, але кількість необхідних робіт все одно збільшується з кількістю очок.


13

З тієї ж причини, коли дивишся на трикутник і знаєш, що це трикутник, ти забуваєш багато мільйонів обчислень, які робиш, не помічаючи цього.

Нейронні мережі

По суті, ви являєте собою нейронну мережу, яка була навчена і навантажена масами на основі маси даних.

Візьмемо для прикладу гру для сортування фігур для немовлят:

введіть тут опис зображення

Коли дитина вперше взаємодіє з цим, цілком ймовірно, що він спробує вставити фігури в неправильні отвори, це тому, що вони ще не навчили свій мозок або не стикалися з достатньою кількістю даних для створення мереж. Вони не можуть робити припущення щодо країв, розміру, .etc, щоб визначити, яка форма підходить до отвору.

Це здається вам очевидним (я сподіваюся), оскільки ви створили ці з'єднання, можливо, ви навіть вважаєте, що це інтуїтивно, і не потрібно розбивати його, наприклад, ви просто знаєте, що трикутник підходить до трикутника і не потрібно наближати його до розміру. , порахуйте ребра, .etc Це неправда, ти все це робив у своїй підсвідомості, єдина свідома думка, що це трикутник. Багато мільйонів обчислень трапилося за допомогою візуального зображення, розуміння того, що воно представляє, розуміння того, що є окремими елементами, а потім оцінки їх відстаней, факт, що у вас була велика база даних для опитування, спростив це.

Ваш мозок не є бінарним

Дані, над якими працює ваш мозок, не є двійковими (наскільки ми знаємо), не є правдивими чи хибними, у них є багато станів, які ми використовуємо для інтерпретації даних, ми також часто помиляємось, навіть якщо дотримуємось правильних процес, це тому, що дані часто змінюються. Я б загрожував припущенням, що наш мозок функціонує набагато більше, як квантовий комп'ютер, коли біти знаходяться в приблизному стані до його зчитування. Тобто, якщо наш мозок взагалі працює як комп'ютер, це насправді не відомо.

Отже, алгоритм роботи з двійковими даними не працюватиме однаково. Ви не можете порівняти два. У голові ви використовуєте концепції для виконання, багатих типів даних, які містять набагато більше інформації, у вас є можливість створювати посилання там, де вони не визначені прямо; побачивши трикутник, ви можете подумати про Темну сторону Пінк Флойда від місячного покриву.

введіть тут опис зображення

Повернувшись до діаграми розсіювання, немає причин, що ви не могли зробити цього на комп’ютері за допомогою растрової карти та вимірювання відстані від точки збільшення радіусів, поки не стикалися з іншою точкою. Це, можливо, найближче до людського наближення. Це може бути набагато повільніше через обмеження даних і тому, що наші мізки не обов'язково дбають про складність обчислень і приймають складний шлях для виконання справ.

Це не було б O (1) або навіть O (n), якщо n - кількість точок, натомість його складність тепер залежить від максимальної лінійної відстані від точки, обраної до межі зображення.

тл; д-р

Ваш мозок - це не двійковий комп'ютер.



8

ви забуваєте один важливий крок: намічайте всі ці точки на графіку, який ви шукаєте.

це необхідність операції O (n).

після цього комп’ютер може використовувати програмне забезпечення для розпізнавання зображень, щоб знайти приблизні точки, найближчі до центру, приблизно так само, як може людське око. Це найгірший варіант операції O (sizeOfImage).

щоб людина робила так, як комп'ютер, пам'ятайте, що комп'ютер отримує список координат і може переглядати лише одну.


1
Якщо вибирати постійну "роздільну здатність", можна використовувати алгоритм, який має час O (log (роздільна здатність)) за точкою, щоб побудувати їх та визначити всі точки, "близькі" до точки, що цікавить. O (журнал (роздільна здатність)) нечітко аналогічний тому, що для нанесення точок на папері потрібно довше, ніж робити менш менш точно. Зауважте також, що збільшення роздільної здатності збільшить вартість алгоритмів на всі точки, щоб усунути точки, які не є кандидатами, але зменшить кількість не найближчих точок виживання після вилучення.
supercat

7

Моє тлумачення питання:

Я не вірю, що це питання слід сприймати спрощено як питання складності обчислювальної геометрії. Це слід краще розуміти як сказане: ми сприймаємо здатність знаходити відповідь у постійний час, коли зможемо. Що пояснює таке сприйняття, а також до цього пояснення та обмежень людини, може зробити і комп’ютер.

O(1)O(log(n))

Це може бути підкріплено законами Вебера-Фехнера , які стверджують, що наше сприйняття повинно вимірюватися логарифмічною шкалою фактичної фізичної міри. Іншими словами, ми сприймаємо відносні зміни, а не абсолютні зміни. Ось, наприклад, чому інтенсивність звуку вимірюється в децибелах.

O(log(n))Oψ(log(log(n)))Oψ

Oψ(log(log(n))) що для всіх практичних цілей, мабуть, сприймається невідмінно від константи, і йому обов'язково додається якийсь постійний час, щоб розпочати процес розпізнавання та визнати результат.

Враховуючи фізіологічні обмеження

Вищенаведений висновок надалі підтримується під час розгляду етапів отримання зображення.

ОП дбала про те, щоб розділити побудову належної структури даних, "наприклад, квадрату", яка амортизується за кількома запитами.

Це не працює для більшості людей, які не запам'ятовують зображення. Я думаю, що зображення сканується для кожного запиту, але це не означає сканування всіх точок: не в перший раз і не для подальших запитів.

TscanTscan

mOψ(log(log(m)))

227log2(27)

Не знаючи фактичних одиниць, які будуть використовуватися, це просто показує, що варіація для обробки в гіршому випадку відповідає тому ж порядку, що й інші операції постійного часу. Отже, цілком природно, що сприймається час на знаходження найближчої точки відчуває себе постійним. . . чи визначимо ми найближчу точку чи лише набір найближчих точок.

Про зустрічні приклади та можливе рішення

Звичайно, легко побудувати зустрічні приклади, які ускладнюють визначення очей найближчої точки серед невеликої колекції найближчих точок. Ось чому ОП насправді запитує алгоритм, який швидко усуває більшість точок, крім найближчих. Це питання можливої ​​складності вибору серед кількох близьких точок розглядається у багатьох відповідях, при цьому парадигматичний приклад найближчих точок лежить майже на колі навколо опорної точки. Зазвичай закони Вебера-Фехнера виключають можливість розрізнення невеликих варіацій відстані на досить великих відстанях. Цей ефект може бути фактично посилений наявністю інших точок, які, хоч і усуваються, можуть спотворювати сприйняття відстаней. Тому спроба визначити найближчу точку буде складнішим завданням, і цілком можуть знадобитися конкретні етапи обстеження, такі як використання інструментів, які повністю знищать відчуття постійного часу. Але це очевидно виходить за рамки експериментів, розглянутих ОП, отже, не дуже актуально.

Питання для відповіді , яке є питанням, яке насправді задає ОП, полягає в тому, чи існує спосіб усунути більшість точок, за винятком, можливо, кількох решти, які здаються дуже схожими на відстань до точки відліку.

O(log(n))

Відмова від амортизованої вартості не дозволяє вирішити комп’ютер, оскільки потрібно враховувати всі моменти. Це підкреслює велику різницю в обчислювальній потужності мозку та людському сприйнятті: він може використовувати аналогові обчислення з властивостями, які сильно відрізняються від цифрових обчислень . Зазвичай це випадок, коли мільярди очок не можна відрізнити оком, у якого немає резолюції бачити щось, крім великої хмари з різними відтінками темного. Але око може потім зосередитись на відповідній меншій частині та побачити обмежену кількість точок, що містять відповідні. Тут не потрібно знати всіх пунктів окремо. Щоб комп'ютер зробив те саме, вам слід було б надати йому подібний датчик, а не точні числові координати кожної точки. Це зовсім інша проблема.

"Просто візуальний огляд" є в чомусь набагато потужнішим, ніж цифрові обчислення. І це пов'язано також з фізикою датчиків, а не просто з можливою більшою обчислювальною здатністю мозку.


O(1)O(logn) O(1)O(1)O(logn)коли ви вирішуєте задачу, що перебуває поза рівнем сприйняття, наприклад, розміщення заданого числа у графічному зображенні збалансованої бінарної купи з міченими вузлами. зауважте, що сприйнятливі обмеження не мають значення, оскільки ви лише оглядаєте графіку локально.
колапс

n

Oψ(log(log(n)))

4

У нас були іспити на іспитах, які, запитуючи, як швидко ви можете сортувати масив, стверджують, що комп'ютери дурні, і їм потрібен n * log (n) (або гірше), тоді як люди можуть це зробити швидше.

Відповідь мого професора була завжди: я надам 10 000 пунктів. Давайте подивимось, чи можна придумати метод, який швидший, ніж те, що робив би комп'ютер.

А далі: скільки процесорних ядер бере участь у спробі знайти найближчу точку? Ви не однопроцесорний апарат, у вас нейрональна мережа, яка має певну гнучкість, коли справа стосується таких завдань.


1
Плюс різні аспекти того, що ви знаєте про дані та які ресурси у вас є, коли вам потрібно сортувати. Наприклад, якщо вашим однокурсникам потрібно сортувати щось, що не може повністю вміститися в кімнаті, в якій вони є.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: це приємно зрозуміти, наскільки важливою є просторова складність "те, що не може повністю вміститися в кімнаті" 8 ^)
Зейн

3

Я вважаю, @ Patrick87 дав вам зрозумілу інформацію: ваші очі та мозок - це масово паралельна обчислювальна машина. Деякі стверджували, що це не пояснює проблему, оскільки для довільно великих проблем кінцева кількість паралельних процесорів не має значення.

Але це так: як натякають багато хто, ваші очі (і мозок) мають обмежену здатність вирішувати цю проблему; і це тому, що не можна помістити будь-яку кількість точок в межах проміжку людського погляду. Ваші очі повинні вміти їх розрізняти для початку, а якщо їх занадто багато, то вони будуть настільки близькими, ніж ваші очі не помітять різниці. Підсумок: це швидко для отримання достатньо добре очок, які підходять до вашого нормального зору, тобто дуже мало. В інших випадках це не вдасться.

Отже, ви можете вирішити цю проблему в O (1) для невеликих і простих випадків, які ваш мозок може обробляти на вітрі. Крім того, він не може, а отже, це навіть не O (що- небудь ), тому що, швидше за все, виходить з ладу.


1

Ніхто не згадував, що цю проблему можна дуже швидко вирішити на комп’ютері з просторовим індексом. Це еквівалент накреслення точок на зображенні для швидкого сканування очей та усунення більшості точок.

Існує дуже хороший алгоритм індексації, який використовує Google та інші для пошуку найближчої точки, яка називається Geohash. http://en.wikipedia.org/wiki/Geohash .

Я думаю, що це навіть збільшить змагання на користь комп’ютера. Мене не вразили деякі відповіді, які використовували лінійне мислення.


Θ(n) Θ(lgn)

Справа в тому, що просторовий індекс робить його приблизно таким же простим, як і для людини, яка дивиться на екран, завалений крапками.
reinierpost

1

Якщо ми розглянемо випадок пошуку найближчих сусідів у точковому наборі n-розмірів в евклідовому просторі, складність, як правило, обмежена кількістю розмірів, коли вона зростає великою (тобто більшою, ніж розмір набору даних).

O(logd2n)

Проблема пошуку найближчої точки до вузла в графі має евклідовий вираз, коли графік можна вбудовувати в евклідовий простір із достатньо малим викривленням. І використовуючи список суміжності з вагами, нам ще потрібно скласти список суміжності.

O(1)


-1

інші відповіді хороші, але як щодо питання протидії дзену, яке розтягує основні міркування / передумови оригінального питання до крайностей, щоб показати деяку помилковість [але також парадокс в основі дослідження ШІ ]:

якщо я можу думати з людським інтелектом, чому я не можу створити комп’ютер, який мислить так само, як людський?

є кілька способів відповісти на ваше запитання, але в основному наші мисленнєві процеси та можливості сприйняття мозку не обов'язково доступні для самоаналізу, і самоаналіз, який ми застосовуємо до них, може бути оманливим. наприклад, ми можемо розпізнавати об'єкти, але у нас немає способу сприймати / пояснювати квазіалгоритмічний процес, який триває, щоб це допустити. Крім того, існує багато психологічних експериментів, які показують, що в нашому сприйнятті реальності і, зокрема, в сприйнятті часу, є тонкі спотворення, див., наприклад, сприйняття часу .

Вчені, як правило, вважають / гадають, що людський мозок насправді використовує алгоритми, але вони функціонують інакше, ніж комп'ютеризовані, а також існує велика кількість паралельної обробки, що відбувається в мозку через нейронні мережі, які не можна розумно порівняти з послідовні комп’ютерні алгоритми. у ссавців значна частина всього обсягу мозку присвячена візуальній обробці.

Іншими словами, мізки людини багато в чому високо оптимізовані візуальні комп’ютери, і вони насправді багато в чому мають можливість, що перевищує найбільші у світі суперкомп'ютери в даний час, наприклад, у розпізнаванні об'єктів etcetera, і це пов'язано з недоліками (порівняно) у створеному для людини програмному забезпеченні / апараті порівняно з біологією, яка була налагоджена / розвинена / оптимізована протягом мільйонів років.


O(f(n))

-2

Взагалі кажучи, ви вирішуєте дві різні проблеми, і якщо ви змагаєтесь в одній конкуренції, складність буде O (1) для вас обох. Чому? Давайте зробимо ситуацію дещо простішою - припустимо, що у вас є лінія з однією червоною точкою та n зеленими точками. Ваше завдання - знайти зелену точку, яка найближча до червоної точки. Все на графіку. Тепер те, що ви робите, і те, що ви програмуєте, в основному те саме - просто «підете» (в обидва боки) від червоної точки і перевірте, чи піксель, який ви дивитесь, білий / чорний (фон) або зелений. Тепер складність становить O (1).

Цікаво, що деякі методи представлення даних дають відповіді на деякі запитання негайно (O (1)). Основний приклад надзвичайно простий - просто порахуйте білі пікселі на чорному зображенні (значення кожного пікселя - 0 = чорне або 1 = біле). Вам потрібно лише додати всі значення пікселів - складність однакова для 1 білого пікселя і для 1000, але це залежить від розміру зображення - O (m), m = image.width * image.height. Чи можна це зробити швидше? Звичайно, все, що нам потрібно зробити, - це використовувати інший метод зберігання зображень, який є цілісним зображенням : введіть тут опис зображення тепер для обчислення результату є O (1) (якщо у вас вже обчислене цілісне зображення). Ще один спосіб - просто зберегти всі білі пікселі в масиві / векторі / списку / ... і просто порахувати його розмір - O (1).


O(1)O(1)

@FrankW - тож у чому полягає складність "пішки"? Я не намагаюся сказати, що ви помиляєтесь, я просто хочу знати. Підрахунок розміру масиву / вектора / списку - зазвичай розмір масиву є постійним, тому його не потрібно рахувати, вектор - я не впевнений, я б сказав, що це залежить від реалізації (але, швидше за все, у більшості реалізацій це просто поле об’єкт, тому немає необхідності його рахувати), перерахуйте - ви маєте рацію, це не О (1) - моя помилка.
Кіріель

kkO(#pixels)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.