Исследование операции поиска символа в строке (PHP)::Журнал СА 1-2.2015
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6410
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7116
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4393
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3085
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3881
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3897
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6385
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3232
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3529
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7363
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10724
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12443
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14095
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9192
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7141
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5446
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4683
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3494
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3211
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3449
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3090
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Исследование операции поиска символа в строке (PHP)

Архив номеров / 2015 / Выпуск №1-2 (146-147) / Исследование операции поиска символа в строке (PHP)

Рубрика: Разработка /  Тестирование

Игорь Орещенков ИГОРЬ ОРЕЩЕНКОВ, инженер-программист, iharsw@tut.by

Исследование операции поиска
символа в строке (PHP)

В статье рассказывается о способе измерения времени выполнения и сравнения эффективности конструкций языка программирования PHP

Производительность – одна из важнейших характеристик программы

При выборе программы, из нескольких вариантов, решающих одну и ту же проблему, пользователь при прочих равных условиях предпочтет ту, что работает быстрее. Это и не удивительно. Во-первых, работать с программой, которая быстро запускается, быстро откликается на воздействия и быстрее выдает требуемый результат, просто приятно. Во-вторых, скорость работы является решающим фактором в некоторых задачах. Например, модуль декодирования видеопотока, не обеспечивающий должной производительности, просто непригоден для использования.

Поэтому скорость работы программы является одним из важнейших ее параметров (наряду с функциональными требованиями, эргономичностью и запросами в отношении объемов оперативной и внешней памяти), которому уделяется много внимания в ходе разработки. Каким образом достигается должная производительность?

Предположим, что аппаратная платформа, на которой будет выполняться программа, архитектура программы и среда ее выполнения уже выбраны. Программисту остается принять решение относительно исполнения программных модулей.

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

Этим классам задач посвящены многочисленные исследования, их результатами стало появление «наилучших практик», которыми руководствуются разработчики [1]. Например, известно, что алгоритм пирамидальной сортировки требует меньше операций, чем сортировка методом «пузырька», а поиск методом половинного деления на отсортированном множестве менее затратен по сравнению с линейным поиском.

Проблема выбора эффективного решения

Однако при решении практических задач прямое применение результатов теоретических изысканий не всегда возможно. Они верны в тех случаях, когда алгоритмы выполняются в одинаковых условиях. Но архитектура современных компьютеров представляет собой многоуровневую систему [2], а современные языки и системы программирования предоставляют средства, работающие на разных уровнях этой архитектуры (см. рис. 1). Из-за этого даже малоэффективные алгоритмы, задействованные через встроенные функции языка, которые реализованы на низких уровнях, могут показать более быструю работу по сравнению с реализациями эффективных алгоритмов на верхнем уровне.

Например, в ходе лексического анализа [3] текста приходится решать вопрос о принадлежности символа некоторому множеству: прописных или строчных букв латинского или русского алфавита, цифр, знаков препинания или пробельных символов. Для этого можно провести поиск символа в эталонной строке. Если анализируемые тексты достаточно велики, то имеет смысл выполнять поиск наиболее эффективным способом, учитывая, что эта операция будет повторяться многократно.

В языке программирования PHP решить поставленную задачу можно одним из трех способов:

  • с помощью встроенной функции strpos (S, C), выполняющей линейный поиск символа C в строке S;
  • реализовав бинарный поиск в отсортированном массиве символов;
  • с помощью логического выражения, проверяющего принадлежность символа некоторому диапазону: L ≤ C ≤ R.

Какой из этих вариантов будет работать быстрее?

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

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

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

Во-вторых, чтобы результаты измерений можно было сравнивать между собой, условия измерений не должны отличаться. При выполнении опытов в среде современных многозадачных операционных систем достичь этого не так просто, как кажется. Независимо от желания администратора фоновый процесс операционной системы может инициировать дисковую операцию, а какая-нибудь служба может решить проверить наличие обновлений на сервере производителя.

В-третьих, эксперимент есть эксперимент, и для получения достоверных результатов нужно провести серию опытов, после чего рассчитать погрешность: вдруг измеренные временные интервалы не могут быть признаны состоятельными?

Понимая глубину проблемы, было принято решение о разработке на языке PHP класса, автоматизирующего процесс тестирования и обеспечивающего необходимые для него условия.

Статью целиком читайте в журнале «Системный администратор», №1-2 за 2015 г. на страницах 77-81.

PDF-версию данного номера можно приобрести в нашем магазине.


  1. Вирт Н. Алгоритмы и структуры данных. //Пер. с англ. – 2-е изд., испр. – СПб.: «Невский Диалект», 2005. – 352 с.
  2. Таненбаум Э. Архитектура компьютера. – 5-е изд. (+CD). – СПб.: «Питер», 2013.-844 с.
  3. Залогова Л. А. Разработка Паскаль-компилятора. – М.: БИНОМ. Лаборатория знаний, 2012. – 183 с.: ил.
  4. Савчук В.П. Обработка результатов измерений. Физическая лаборатория. Ч.1: Учеб. пособие для студентов вузов. – Одесса: ОНПУ, 2002. – 54 с.: ил.
  5. Таненбаум Э. Современные операционные системы. – 3-е изд. – СПб.: «Питер», 2013. – 1120 с.
  6. Тестирующий класс PHP – https://github.com/R0bur/PHP-performance-test/archive/master.zip.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru