Привет, я узнал о Big-O и задавался вопросом, почему умножение O (n^2). Кажется, я знаю, почему, но я просто не уверен. Это из-за того, как долго работает умножение? Я знаю, что добавление - это линейное время O (n), и если мы выполняем двоичное умножение, мы сначала умножим все биты и сдвинем его. После того, как мы закончим смещение и умножение всех бит, мы сделаем дополнение. Поэтому я предполагаю, что рекурсивный вызов умножения равен O (n), и добавление результата будет O (n). Поэтому расчесывание двух времени выполнения даст нам O (n^2). Это правильно или я ошибаюсь? Edit: Так что я думаю, что я спрашиваю, почему это класс школы умножения O (N^2)Почему умножение O (n^2)?
Благодаря
Продвижение не только потому, что это правильный ответ, но и потому, что вы написали его через 9 минут. Это должна быть какая-то запись. Но я думаю, что ответ был бы лучше, если бы он имел некоторые ссылки на более подробные сведения о предмете. –
Извините, я забыл поставить, что я умножаю m-разрядное число x и n-разрядное число y. Если это так, моя первая линия мышления была бы правильной, поскольку я думал о длительном умножении? –
@ RonnieGarcia: Итак, когда вы произносите эту часть «Я знаю, что добавление - это линейное время O (n), и если мы выполняем двоичное умножение, мы сначала умножим все биты и сдвинем его. После того, как мы закончим смещение и умножение всех битов, мы будем сделайте дополнение ». это звучит для меня как размножение русских крестьян. Но когда вы говорите это «Итак, я предполагаю, что рекурсивный вызов умножения - это O (n), и добавление результата будет O (n)». Я не уверен, что такое рекурсивный вызов. Так может быть лучше написать фактический псевдокод? –