|
|
|
|
|
|
Теги |
| |
codeserfercom, Linux, nbspnbsp, Private, Visual, Возможность, Пример, Рассмотрим, Сегодня, Теперь, будет, данных, значение, который, может, можно, написать, например, очень, переменной, переменных, пользователя, помощью, программа, программирования, программы, просто, работы, разработки, решил, сделать, скрипт, строки, строку, также, только, функции, число, этого, языка
Показать все теги
|
|
|
| |
|
|
|
|
|
|
|
|
| |
Можно сколько угодно биться над повышением производительности программы и достичь лишь минимальной выгоды, если алгоритм программы изначально не способен работать быстрее. Но если изменить алгоритм, производительность может вырасти в несколько раз. Рассмотрим пример. Допустим, что вам нужно отсортировать список названий городов (назовем его Listl). Для этого можно действовать по следующему алгоритму: 1. Создать новый список List2, который будет хранить отсортированные данные. 2. Взять первый элемент списка List1 и поместить его в переменную х. 3. Сравнить переменную х с очередным элементом списка List2. 4. Если х окажется меньше, то вставить его в список List2 перед сравниваемой строкой. Если нет, то перейти к сравнению со следующим элементом списка List2. 5. Выполнять шаги 3 и 4, пока х не найдет свое место. Если список List2 закончился, то значит, х больше всех элементов и его нужно вставить в конец списка. 6. Взять следующий элемент списка List1 , поместить его в переменную х и перейти к шагу 3. Для реализации этого алгоритма нужно два цикла, причем, один из них вложенный. Первый цикл перебирает список Listl, и для каждого элемента выполняется цикл, в котором проверяются все элементы списка List?. Помимо этого, на каждом шаге цикла происходит сравнение. Если сосчитать количество произведенных операций, то получится очень большое число. К тому же, сам алгоритм прост только на первый взгляд. На самом деле, для его реализации нужно достаточно сильно постараться и при этом не ошибиться, а здесь достаточно мест, где можно допустить ошибку. Можно как-то попытаться увеличить скорость операций сравнения, но тут у нас слишком ограничены возможности. Если у самого процессора есть несколько способов сравнить два числа, то у РНР их можно пересчитать по пальцам одной руки. А теперь представим, что этот алгоритм должен отсортировать следующую последовательность чисел: 1, 2, 3, 4, 5, 6, 8, 7, 9. В этой последовательности достаточно поменять только числа 8 и 7 местами, но наш алгоритм этого не знает, поэтому будет выполняться очень долго. А если массив уже отсортирован? Тяжелая работа интерпретатора и процессора окажутся напрасными. Замена алгоритма на что-то более совершенное позволит ускорить работу в несколько раз. В данном случае не совсем корректно выбран пример, потому что для сортировки существует великое множество разных вариантов алгоритмов, и каждый из них при определенных условиях может работать быстрее других. Но мы рассмотрим один из вариантов, который может реально повысить скорость работы: 1. Помещаем первый элемент в переменную х. 2. Устанавливаем флаг состояния в значение false. 3. Следующий компонент помещаем в переменную У. 4. Сравниваем переменные. Если X>Y, то меняем их в списке местами и устанавливаем флаг состояния в значение true. Иначе записываем в х значение Y. 5. Если просмотр не закончен, то перейти к шагу 2. 6. Если просмотр закончен, то проверить переменную состояния. Если она равна true, то во время проверки элементы менялись местами, и нужно повторить прогон сначала. Если состояние равно false, то повтор не нужен, все элементы отсортированы. Возвращаемся к примеру последовательности, в которой нужно только поменять местами два элемента. При новом алгоритме нужно будет только два раза просмотреть весь список. На первом шаге цифры 7 и 8 поменяются местами, а после второго просмотра списка программа увидит, что изменений не было, а значит, список отсортирован. Этот алгоритм нуждается только в одном цикле, который будет выполняться намного меньше раз, если данные более-менее упорядочены. Но даже при максимальном перемешивании скорость работы этого алгоритма выше, чем у рассмотренного первым. Как видите, очень важно правильно выбрать алгоритм. Если окажется, что ваш сценарий работает слишком медленно, я рекомендую уничтожить его и начать писать с чистого листа. Как я уже сказал, в РНР это очень важно, потому что нет возможности обращаться к процессору напрямую и использовать его преимущества. Разработчики РНР создавали интерпретатор максимально универсальным, поэтому и сами не очень часто оптимизировали код под конкретную архитектуру. А ведь если знать, что программа точно будет работать на Pentium 4, то можно было бы использовать новые возможности этой архитектуры, технологию Hyper Threading и новые инструкции процессора, что значительно повысит скорость работы программы даже при медленных алгоритмах. Большинство программ так или иначе использует математические алгоритмы, поэтому для написания эффективных программ вы должны хорошо разбираться в математике. Например, математические алгоритмы применяются при сортировке. |
|
| |
Что-то не получается? Не понятна какая-то часть кода? Напишите комментарий об этом и мы обязательно Вам все объясним! Обязательно напишите отзыв о программе / учебнике. Для выражения благодарностей есть кнопка:
Своё Спасибо, еще не выражали.
|
| |
| |
Просьбы перезалить в комментариях принимаются |
| |
|
|
| |
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем. |
|
| |
Другие коды по теме: |
|
| |
СортировкаСимметричное шифрование в PHPМассивыРабота с DNSСканер портов на PHP |
|
|

© 2008 - 2010. Копирование материалов запрещено! |
|
|