10.02.2017, 15:59 | #21 |
Участник
|
Цитата:
Сообщение от mazzy
конечно же нет.
числа фибоначчи определяются через золотое сечение. именно этим они и интересны. рекуррентная последовательность - это следствие из определения. кстати, именно возврат к исходному определению через золотое сечение и позволяет перейти от суммирования последовательности к умножению матриц достигнуть производительности < O(n) https://ru.wikipedia.org/wiki/%D0%A7...87%D1%87%D0%B8 Из той же статьи: Цитата:
Более формально, последовательность чисел Фибоначчи задаётся линейным рекуррентным соотношением.
Цитата:
In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation.
Приведённое определение через матрицы и определители отсылает нас к значениям континуант на наборе единиц, которые в свою очередь определяются рекуррентным соотношением. И я очень сомневаюсь, что математики древней Индии знали что такое матрица, что такое определитель матрицы, символ кронекера и как перемножать матрицы, так как соответствующая теория сформировалась в конце 17-го-середине 18-го веков. По-моему, если уж так хочется обсудить теорию алгоритмов и теорию сложностей, то для этого есть более и практические задачи типа сортировки или поиска или графов. Но при чём тут система ценностей? Исходя из моего опыта, у большинства работодателей есть только одна система ценностей: скорость работы, а качество кода, его выразительность, оптимизация не так уж важны. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
10.02.2017, 16:00 | #22 |
Участник
|
Цитата:
1. перевод стрелок на другого 2. невнимательное чтение исходного ТЗ - я говорил "характеристика кандидата", я не говорил про "плохого разработчика или консультанта" )))) |
|
10.02.2017, 16:05 | #23 |
Участник
|
С одной стороны, ряд Фибоначчи у меня вызывает доверие - потому что он состоит только из целых чисел (судя по начальному тексту в википедии).
С другой стороны, ряд Фибоначчи вызывает у меня недоверие - потому что он таинственным образом связан с золотым сечением, и всякими таинственными оговорками Маззи о применимости целых чисел. Резюме: я бы на собеседовании заявил бы об этом дуализме ряда Фибоначчи, и что я осознал этот дуализм в беседе с моим испытателем (или как называется тот, кто главный на собеседовании ?). И осторожно намекнул бы, что хочу чуть меньше денег, чем объявлено в вакансии. |
|
10.02.2017, 16:09 | #24 |
Участник
|
Лайк
Цитата:
я говорил: "числа фибоначчи определяются через золотое сечение" я говорил: "рекуррентная последовательность - это следствие из определения." я полностью согласен с тем, что числа Фибонначчи ЗАДАЮТСЯ через рекурентную формулу. я никогда не говорил про "определение через матрицы". я говорил, что можно свести к возведению в степень и умножению матриц и получить очень быстрое вычисление. Цитата:
Сообщение от AP-1055D
Кроме чисел Фибоначчи есть расширение этого кольца до чисел трибоначчи, которые также определяются через рекурсию.
2. через рекурсию они задаются/выводятся, а не определяются. Цитата:
Но почему ИЛИ-ИЛИ? Можно и то, можно и другое... Цитата:
И вы утверждаете, что для вас работодатели не применяют систему ценностей - качества кода, выразительность, оптимизация? А почему, как вы думаете? Последний раз редактировалось mazzy; 10.02.2017 в 16:15. |
|
10.02.2017, 16:11 | #25 |
Участник
|
можно.
а можно заявить об ограниченности представления целых чисел в компьютере. и о том, как эту ограниченность можно преодолевать... нужно ли, в какие сроки, какой ценой. видите, вот так и проявляется "хорошесть" кандидата, его система ценностей )))) |
|
10.02.2017, 16:12 | #26 |
Moderator
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: mazzy (10). |
10.02.2017, 16:21 | #27 |
Участник
|
Опс. Спасибо. Выделил в отдельную ветку.
|
|
10.02.2017, 16:42 | #28 |
Участник
|
Да, прости. Так как обсуждение попалось мне на форуме по Дакс, я имел неосторожность предположить, что данная задача попалась кандидату на разработчика именно этой системы. Есть просто на программиста, то пример - отличный.
Цитата:
Чем данные вопросы отличаются от вопроса сколько заправок в городе? Цель одна и та же - посмотреть цепочку рассуждений. И желание это делать. |
|
10.02.2017, 19:36 | #29 |
Участник
|
Цитата:
То есть, да, качество кода и всё остально тоже важно, но не на первом месте. А выразительность кода может оценить только программист не менее сильный чем ты сам, но это бывает так редко, да и обычно не до этого, так как есть сроки в часах, дедлайн и так далее ) |
|
10.02.2017, 19:50 | #30 |
Участник
|
конечно же нет (С)
важна общая трудоемкость реализации/разработки + настройки + поддержки + развития. а выразительность, красота и лаконичность кода влияет на последние слагаемые. готов согласиться, что, возможно, исходя из вашего опыта вам видна только скорость реализации/разработки. также готов согласиться, что KPI многих ПМ на проектах внедрения не зависит от сопровождения и развития. Поэтому лепят горбатого и сокращают первые два слагаемых, при этом неизбежно раздувая остальные. |
|
|
За это сообщение автора поблагодарили: ice321i (1). |
10.02.2017, 19:57 | #31 |
Banned
|
Цитата:
Сообщение от AP-1055D
Исходя из моего опыта, на первом месте, то есть в приоритете, в мире AX, и, особенно, в консалтинге, важна именно скорость реализации / разработки, а потом уже всё остальное. Иногда Потому что время - деньги.
То есть, да, качество кода и всё остально тоже важно, но не на первом месте. А выразительность кода может оценить только программист не менее сильный чем ты сам, но это бывает так редко, да и обычно не до этого, так как есть сроки в часах, дедлайн и так далее ) Я кстати вообще не имею понятия что такое Фибоначи и Золотое сечение. Всегда считал "математиков" больными на всю голову как и тех кто считает что программирование это математика. |
|
|
За это сообщение автора поблагодарили: AP-1055D (1). |
10.02.2017, 20:16 | #32 |
Участник
|
Конечно же нет )))
Программисты, которые пишут быстро, красиво и как надо, сейчас ухмыляются... Всем программистам, у которых требуют только сроки, стоит задуматься - а почему мне дают только такие задачи, которые уже сложно испортить? Поставьте себя на место раздающего задачи. У вас наверняка есть масса задач. Некоторые уже не испортишь и надо просто сделать и забыть. Над некоторыми надо покумекать и родить что-то такое, что можно будет потом развивать и поддерживать. У вас есть резюме товарищей. И тестовые задачи. Вы видите, что некоторые из товарищей легко употребляют рекурсию для ряда фибоначчи, используют int32 для хранения чисел фибоначчи и пишут while(true). Причем не предупреждают об этом хотя бы в виде И кому какие задачи вы выдадите, будь вы на месте раздающего задачи? ======================= на рынке полно программистов. на рынке полно малооплачиваемой срочной и скучной работы. на рынке есть и интересные высокооплачиваемые задачи. может вы их просто не видите? |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
10.02.2017, 20:39 | #33 |
Moderator
|
Цитата:
Рекурсия для Фибоначчи?
Без дополнительного кэширования полученных результатов? И без дополнительных комментариев почему именно так? мне бы тоже не понравилось. Если не ошибаюсь, подобная задача расбирается в одной из первых глав классической книги "Структура и интерпретация компьютернах программ". |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
10.02.2017, 20:48 | #34 |
Участник
|
Цитата:
тут дело в ленивых вычислениях. ну и отсутствие побочных эффектов, принятое в функциональных языках (если не увлекаться монадами, конечно) именно ленивые вычисления и отсутствие побочных эффектов и позволяют так легко использовать рекурсию. но даже на функциональных языках есть проблема повторных memcaсhe конечно спасает отца русской демократии во многих случаях. но обычно за счет непомерно увеличенного потребления памяти. так скорее всего, в функциональном языке придется хранить все числа последовательности. или алгоритм будет каким-то безумным. обрати внимание, что для линейной оценки времени выполнения достаточно хранить только два числа последовательности Фибонначи. а для меньшей оценки (f(n) < On(n)) достаточно хранить только три числа. Последний раз редактировалось mazzy; 10.02.2017 в 20:53. |
|
10.02.2017, 20:59 | #35 |
Участник
|
Предыдущий мой пост зачеркнуть и забыть.
Цитата:
и объяснишь про "оптимизацию хвостовой рекурсии" для ряда чисел Фибоначчи? ну, или ссылки хотя бы ))) Последний раз редактировалось mazzy; 10.02.2017 в 21:03. |
|
10.02.2017, 21:22 | #36 |
Moderator
|
Когда функция вызвает другую функцию (себя, как частный случай) она кладет на стек (который имет фиксированный и довольно небольшой размер) переменные, которые надо передать в функцию, и адрес возврата.
В рекурсивных программах глубина рекурсии может быть большой и стек может "внезапно переполнится". Если компилятор поддерживает оптимизацию хвостовой рекурсии и мы правильно написали программу (оба момента важны - не любую рекурсию можно оптимизировать), то мы можем избежать использования стека. Для того, чтобы эта магия произошла рекурсивный вызов должен быть последней операцией в вызывающей функции. А результатом функции должен быть результат вот этого рекурсивного вызова. В этом случае адрес возврата и так находится в стеке, а значения параметров просто подменяются на новые. Получается, что стек не растет по мере рекурсивного вызова функций (а это критично для функциональных языков программирования, где цикл сделать не всегда возможно) независимо от глубины рекурсии. |
|
10.02.2017, 21:27 | #37 |
Участник
|
|
|
10.02.2017, 21:34 | #38 |
Moderator
|
А можно на примере факториала ? У меня просто слайды остались с одного из докладов http://www.evernote.com/l/ABEfDwoBJN...J5KRvLmJcd7RA/ (на примере F#). Там как раз показан неочивидный момент, когда рекурсия не может быть оптимизирована.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
10.02.2017, 21:42 | #39 |
Участник
|
Не-а. ))))))
Для факториала как раз замечательно выполняется оптимизация хвостовой рекурсии даже вручную. На собеседовании могут давать факториал, а могут давать фибоначчи )))) Особое удовольствие опрашивающий получает, если кандидат врубается и сразу рассказывает об отличиях и применимости оптимизации хвостовой рекурсии. или сразу рассказывает об оценке сложности алгоритма. или еще что-нибудь интересное. бывает, конечно, когда кандидат не врубается и предлагает "удалиться". что ж... в этом случае вряд ли такому кандидату стоит задавать другие вопросы. |
|
10.02.2017, 21:43 | #40 |
Banned
|
Цитата:
Сообщение от mazzy
Конечно же нет )))
Программисты, которые пишут быстро, красиво и как надо, сейчас ухмыляются... Всем программистам, у которых требуют только сроки, стоит задуматься - а почему мне дают только такие задачи, которые уже сложно испортить? Поставьте себя на место раздающего задачи. У вас наверняка есть масса задач. Некоторые уже не испортишь и надо просто сделать и забыть. Над некоторыми надо покумекать и родить что-то такое, что можно будет потом развивать и поддерживать. У вас есть резюме товарищей. И тестовые задачи. Вы видите, что некоторые из товарищей легко употребляют рекурсию для ряда фибоначчи, используют int32 для хранения чисел фибоначчи и пишут while(true). Причем не предупреждают об этом хотя бы в виде И кому какие задачи вы выдадите, будь вы на месте раздающего задачи? ======================= на рынке полно программистов. на рынке полно малооплачиваемой срочной и скучной работы. на рынке есть и интересные высокооплачиваемые задачи. может вы их просто не видите? А настоящий программист AX делает сначала быстро и грязно, после чего понимает что надо, и только потом по возможности делает красиво. Мне не нужны те кто щелкает олимпиадные задачи физмат школы, мне нужны те кто хорошо умеет делать работающие вещи. Задач я бы не задавал вообще. |
|
|
За это сообщение автора поблагодарили: Bobkov (3). |