Многочисленные методы и эффективность класса Ruby String - PullRequest
1 голос
/ 18 января 2011

Я просматривал исходный код Ruby и не могу найти ответ на свой вопрос:

Если я вызываю несколько методов для строки (str.upcase.reverse), оптимизирует ли Ruby этот запрос? Код для upcase в основном перебирает строку и закрывает каждую букву заглавными буквами, а reverse переворачивает строку. Объединяет ли Ruby эти (или любые другие комбинируемые комбинации) так, чтобы он одновременно обращался к заглавной букве И O(n) вместо того, чтобы повторять каждый символ в строке дважды?

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Оптимизация, на которую вы надеетесь, не произойдет. Метод reverse вызывается для строки (результат str.upcase). Обратите внимание, что в результате поведение по-прежнему O(n), однако (O(2n) равно O(n))

1 голос
/ 18 января 2011

Нет, никакой оптимизации, как вы описали, нет, но вы можете написать метод, который выполняет обратную + прописную в одном цикле.

Обязательно ознакомьтесь со стандартной библиотекой Benchmark . При написании оптимизаций всегда бенчмарк, никогда не предполагайте:)

PS: reverse.upcase по-прежнему O (n). Обозначение Big O игнорирует константы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...