Из того, что я видел, кажется, что в формальном обучении информатике большое внимание уделяется нотации big-O, а также сложности времени и памяти ... однако, будучи самоучкой, это восприятие основано на слухе и чтении того, что люди с таким образованием получают. говори и пиши.
Хотя я считаю, что общие идеи и концепции важны, я не верю, что их формализация (например, нотация big-O и различная терминология) имеет почти такое же значение, за исключением целей коммуникации. Тот факт, что кто-то не знаком с формальными обозначениями и терминологией, не означает, что они не могут понять, как и почему один алгоритм будет быстрее, чем другой в конкретном случае. Люди могут видеть, что время, затрачиваемое на поиск сбалансированного бинарного дерева, относится к логарифму base-2 числа узлов без предварительного изучения теории сложности в каком-либо формальном смысле, если они понимают, как работает дерево, и имеют разумное понимание высокого школьная математика. Важно знать, когда обращать внимание на сложность и использование памяти, и учитывать типичные и наихудшие случаи, хотя ... но некоторые люди этого не делают.
Обозначения и терминология становятся важными для общения. Они дают хороший способ передать количественную оценку производительности алгоритма кому-то еще. Поскольку это часто встречается в документах и объяснениях, полезно иметь хотя бы смутное представление об этом, чтобы им было легче следовать.
Так да, понятия очень важны (хотя и меньше, когда ресурсы и время достаточно , но данные не). Но хотя понятия важны, их формализация часто не так важна - и нужно помнить, что обозначения и терминология не совпадают с самими понятиями.
Редактировать:
Я бы не претендовал на то, чтобы понимать концепции так подробно, как кто-то, кто формально изучал, но многие общие идеи просто имеют смысл. Я действительно думаю, что есть формальное изучение этого, но некоторые из этих ценностей все еще могут существовать без.
Что касается введения концепций (вне формального изучения), я думаю, что хорошее начало - это побудить людей задуматься о том, сколько памяти занимают структуры данных, какие этапы включают алгоритмы и как эти вещи меняются с различными данными.
Это также помогает учитывать гипотетические ситуации и изменения, например, учитывать, что происходит, если дерево сбалансировано, и то, что происходит, если оно максимально сбалансировано, или сколько уровней в дереве будет иметь большинство узлов, или сколько еще узлов оно может удерживайте, если глубина увеличивается на один уровень. Этот способ мышления обычно полезен программистам в любом случае, а не только при взгляде на сложность; и если применять его к размышлениям о том, как алгоритмы и структуры данных работают в различных обстоятельствах, это, естественно, указывает в том же направлении, что и более формальное рассмотрение сложности.
O(n^2)
значит.