Результаты в Python 3.1

rezultaty v python 3 1 Структуры данных

Ниже приводятся некоторые результаты, которые были получены с помощью управляющего сценария. В трех тестах было получено время в секундах для трех реализаций: оригинальной, на основе кортежей и на основе непосредственного изменения списка в памяти. Для каждой разновидности стека тест создает 200 экземпляров стека и выполняет примерно 120 000 операций со стеком (200 повторов х (200 операций проталкивания в стек + 200 обращений по индексу + 200 операций выталкивания со стека)) в течение указанного в результатах времени. Эти результаты были получены на очень медлительном ноутбуке, работающем под управлением Windows 7, в Python 3.1. Как обычно, у вас могут получиться иные результаты.

C:\\PP4E\Dstruct\Basic> python stacktime.py 200 200 200

stack2: 0.838853884098

stack3: 2.52424649244

stack4: 0.215801718938

C:\\PP4E\Dstruct\Basic> python stacktime.py 200 50 200

stack2: 0.775219065818

stack3: 2.539294115

stack4: 0.156989574341

C:\\PP4E\Dstruct\Basic> python stacktime.py 200 200 50

stack2: 0.743521212289

stack3: 0.286850521181

stack4: 0.156262000363

C:\\PP4E\Dstruct\Basic> python stacktime.py 200 200 0

stack2: 0.721035029026

stack3: 0.116366779208

stack4: 0.141471921584

Если внимательно посмотреть, то можно заметить по результатам, что стек, основанный на кортежах (stack3), показывает лучшую производительность, когда производится больше операций проталкивания в стек и выталкивания со стека, но оказывается хуже, когда производится много обращений по индексу. Операция обращения по индексу происходит очень быстро для встроенных списков (stack2 и stack4), но очень медленно для деревьев кортежей — класс Python вынужден вручную выполнять обход дерева.

Стеки, основанные на непосредственной модификации списка в памяти (stack4), поч ти всегда действуют быстрее всего, кроме случаев, когда вообще не выполняется никаких операций обращения по индексу — в последнем тесте кортежи (stack3) победили с небольшим перевесом. При отсутствии операций обращения по индексу, как в последнем тесте, реализации на основе кортежей и на основе непосредственной модификации списка в памяти оказываются примерно в шесть и в пять раз быстрее, чем простая реализация на основе списка соответственно. Поскольку операции проталкивания в стек и выталкивания со стека являются основными операциями, необходимыми клиентам от стека, кортежи являются претендентом на победу, несмотря на слабую производительность при обращении по индексу.

Конечно, мы говорим о долях секунды после многих десятков тысяч операций. Во многих приложениях пользователи могут не почувствовать разницы. Однако если программа обращается к стеку миллионы раз, эта разница может стать весьма существенной.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий