Рейтинг інтерв'ю FizzBuzz (1), реалізація malloc (10) [закрито]


10

Я хотів би мати вашу думку щодо складності наступного питання інтерв'ю:

Знайдіть суміжний підмасив з максимальною сумою в масиві цілих чисел за O (n) час.

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

За шкалою 1-10, 1 - тест FizzBuzz (або HoppityHop ), а 10 - реалізує функцію C stdlib malloc (), як би ви класифікували вищезазначену проблему?

Я думаю, що люди, які найкраще можуть відповісти на це запитання, - це ті, хто читав програмувальні перлини і намагався вирішити цю проблему самостійно. Щоб мотивувати тих, хто цього не зробив, "програмування перлів" багато разів фігурує у списку "Топ-10 книг програмування".

Кілька коментарів можуть допомогти отримати кращу оцінку:

  • Реалізація malloc () не така грозна, як здається. Наприклад, див. Мову програмування на C & K. Іноді це запитують у Microsoft .

  • Спостереження CLRS щодо вирішення проблем: часто важче вирішити проблему з нуля, ніж перевірити чітко представлене рішення, особливо під час роботи в умовах обмеженого часу .


12
Тут складність полягає в тому, що цілі числа можуть бути негативними? (інакше весь масив завжди є найбільшим підрядним масивом, звідси O (1) :-P)
Макке

4
Проблема повинна сказати : «Знайдіть суміжні подмассів ...»
V64

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

2
Правильно. Це проста проблема, якщо ви дозволяєте вирішити O (n²).
дан04,

@Dean, я сподіваюся, що вони зможуть перемістити суму поточного типу авері з місця j до j + 1 в O (1). Можливо, справедливо, що може бути натяком. (Я припускаю, що довжина підмножини була уточнена)
Omega Centauri

Відповіді:


17

Це дійсно залежить від розробника.

Якщо malloc був 10, то я би оцінив цю проблему як 20. Але тоді я знову робив malloc раніше і, ймовірно, можу це зробити ще раз.

Хтось, хто вирішив цю проблему або знає відповідний алгоритм у верхній частині голови, зробить це 5, а malloc () 10.

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

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


погода -> чи в четвертому абзаці (і вибачте за шум, я не маю відповіді, щоб вводити друкарські зміни ...)
Матьє М.

Мартіне, я думаю, це залежить від типу програми, з якою ви опитуєте людей. Для систем типи malloc досить прості. Для мене - я застряг, [я припускаю, що адреса стека та довжина тощо були навмисно приховані від мене] з malloc, але проблема підрядної маси майже тривіальна. Ключовим є відповідність запитань потребам роботи.
Омега Кентаврі

8

Гадаю, рейтинг повинен бути принаймні двовимірним. FizzBuzz - mallocописує діапазон на одній осі, я б назвав це «технологічною складністю». Але цього єдиного виміру, безумовно, недостатньо для опису проблеми. Щоб вирішити цю проблему, розробник повинен думати більше, ніж код , при цьому для реалізації mallocпотрібно більше дисципліни кодування, ніж створення складних алгоритмів.

Отже, ось як я влаштую ці проблеми:

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

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


2

Я думаю, що це набагато складніше, ніж FizzBuzz або HoppityHop - ці двоє - це не що інше, як простий випадок "if-else" або "case-switch" у циклі.

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

За вашою шкалою від 1 до 10, я, ймовірно, оцінюватиму її між 3 і 5.

* Поки сервер не працював, я виявив, що проблема з максимальним підрядником має власну сторінку у wikipedia.


Чи може хтось пояснити, для чого потрібен алгоритм, описаний у wikipedia, коли для мене працює наступний концептуально набагато простіший алгоритм: За один прохід обчисліть сукупну суму, знаходячи мінімальний та максимум звичайним способом. Максимальна сума послідовних підрядів починається після мінімального індексу кумусу та поширюється аж до максимального індексу закінчення.
Ben Voigt

2
@Ben Voigt: спробуйте послідовність {+2, -4, +1} або {+1, +1, -1, -1, -1, -1, +1}. Насправді метод Кадане дуже простий - він сканує масив лише один раз і постійно оновлює три змінні у стилі діаманмічного програмування.
rwong

@rwong: ах добре, Кадане потрібен у випадку, коли мінімум настає після максимуму. І я рахую 5 змінних, а не 3 плюс індекс циклу.
Ben Voigt

@Ben: ти маєш рацію, це 5 змінних плюс індекс циклу.
rwong

1

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

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