Доклад на тему оптимизация информатика

Обновлено: 04.07.2024

Эта статья об оптимизации программ и данных вообще;
об оптимизациях, применяемых компиляторами см.: Оптимизация компилятора.

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

Хотя целью оптимизации является получение оптимальной системы, истинно оптимальная система в процессе оптимизации достигается далеко не всегда. Оптимизированная система обычно является оптимальной только для одной задачи или группы пользователей: где-то может быть важнее уменьшение времени, требуемого программе для выполнения работы, даже ценой потребления большего объёма памяти; в приложениях, где важнее память, могут выбираться более медленные алгоритмы с меньшими запросами к памяти.

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

Содержание

Основы

Некоторые задачи часто могут быть выполнены более эффективно. Например, программа на языке Си, которая суммирует все целые числа от 1 до N:

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

Компромиссы (tradeoff)

Оптимизация в основном фокусируется на одиночном или повторном времени выполнения, использовании памяти, дискового пространства, пропускной способности или некотором другом ресурсе. Это обычно требует компромиссов — один параметр оптимизируется за счёт других. Например, увеличение размера кеша улучшает производительность времени выполнения, но также увеличивает потребление памяти. Другие распространённые компромиссы включают прозрачность кода и его выразительность. Сложные специализированные алгоритмы требуют больше усилий по отладке и увеличивают вероятность ошибок.

Различные области

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

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

Узкие места

Для оптимизации требуется найти узкое место: критическую часть кода, которая является основным потребителем необходимого ресурса. Улучшение примерно 20 % кода влечёт за собой изменение 80 % результатов (см. также принцип Парето).

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

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

Простейшие приёмы оптимизации программ по затратам процессорного времени

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

Инициализация объектов данных

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

Программирование арифметических операций

В том случае, когда значительная часть времени работы программы отводится арифметическим вычислениям, немалые резервы повышения скорости работы программы таятся в правильном программировании арифметических (и логических) выражений. Важно, что различные арифметические операции значительно различаются по быстродействию. В большинстве архитектур, самыми быстрыми являются операции сложения и вычитания. Более медленным является умножение, затем идёт деление. Относительно много времени тратится на обращение к подпрограммам. Быстродействие также зависит и от типа операндов. Например, в языке Turbo Pascal, ввиду особенностей реализации целочисленной арифметики, операция сложения оказывается наиболее медленной для операндов типа Byte и ShortInt : несмотря на то, что переменные занимают один байт, арифметические операции для них двухбайтовые и при выполнении операций над этими типами производится обнуление старшего байта регистров и операнд копируется из памяти в младший байт регистра. Это и приводит к дополнительным затратам времени.

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

Циклы

Различается и время выполнения циклов разного типа. Время выполнения цикла со счетчиком и цикла с постусловием при всех прочих равных условиях совпадает, цикл с предусловием выполняется несколько дольше (примерно на 20-30 %).

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

Цикл в левой колнке выполняется примерно на 10 % дольше, чем в правой.

На первый взгляд, и в первом, и во втором случае 10 000 000 раз выполняется оператор присваивания, и затраты времени на это должны быть одинаковы в обеих случаях. Но это не так. Объясняется наше наблюдение тем, что инициализации цикла, то есть обработка процессором его заголовка с целью определения начального и конечного значений счетчика, а также шага приращения счетчика требует времени. В первом случае 1 раз инициализируется внешний цикл и 100 000 раз — внутренний, то есть всего выполняется 100 001 инициализация. Во втором случае, как нетрудно подсчитать, таких инициализаций оказывается всего лишь 1001.

Аналогично ведут себя вложенные циклы с предусловием и с постусловием. Можно сделать вывод, что при программировании вложенных циклов по возможности следует делать цикл с наибольшим числом повторений самым внутренним, а цикл с наименьшим числом повторений — самым внешним.

При вычислении сумм часто используются циклы, содержащие одинаковые операции, относящиеся к каждому слагаемому. Это может быть, например, общий множитель (язык Turbo Pascal):

Очевидно, что вторая форма записи цикла оказывается более экономной.

Инвариантные фрагменты кода

Оптимизация инвариантных фрагментов кода тесно связана с проблемой оптимального программирования циклов. Внутри цикла могут встречаться выражения, фрагменты которых никак не зависят от управляющей переменной цикла. Их называют инвариантными фрагментами кода. Современные компиляторы часто определяют наличие таких фрагментов и выполняют их автоматическую оптимизацию. Такое возможно не всегда, и иногда производительность программы зависит целиком от того, как запрограммирован цикл. В качестве примера рассмотрим следующий фрагмент программы (язык Turbo Pascal):

Здесь инвариантными фрагментами кода являются слагаемое Sin(x * k * i) в первом цикле по переменной m и операция деления на элемент массива c[k] во втором цикле по m . Значения синуса и элемента массива не изменяются в цикле по переменной m , следовательно, в первом случае можно вычислить значение синуса и присвоить его вспомогательной переменной, которая будет использоваться в выражении, находящемся внутри цикла. Во втором случае можно выполнить деление после завершения цикла по m . Таким образом, можно существенно сократить количество трудоёмких арифметических операций.

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

Процесс оптимизации структуры ЛВС ВУЗа включает в себя этапы обоснования программной и аппаратной составляющей сети. Обоснование программной составляющей сети проводиться из следующих соображений. Иерархия компьютерных систем, используемых в вычислительных сетях ВУЗа, влечет за собой разнообразие операционных систем (ОС) для рабочих станций, для серверов сетей уровня подразделений и серверов уровня ВУЗа в целом. К ним предъявляются различные требования по производительности и функциональным возможностям.

Сетевые возможности современных операционных систем персональных компьютеров позволяют использовать их в качестве клиентов сети. В свою очередь, на серверах уровня подразделений и серверов уровня ВУЗа желательно устанавливать ОС, специально оптимизированные для выполнения тех или иных серверных функций. Такие сетевые ОС должны поддерживать несколько стеков протоколов (таких как TCP/IP, IPX/SPX, NetBIOS, DECnet и OSI), обеспечивать простой доступ к удаленным ресурсам, иметь органичную поддержку многосерверной сети, высокую эффективность файловых операций, возможность эффективной интеграции с другими ОС, разнообразные сервисы, поддержку сетевого оборудования стандартов Ethernet, Token Ring, FDDI, ARCnet, а так же возможность взаимодействия с системой контроля и управления сетью.

Анализ показывает, что такие распространенные сетевые ОС, как Novell NetWare, IBM LAN Server, Sun NFS, UNIX и Windows NT Server, могут служить в качестве серверной операционной системы ВУЗа, в то время как ОС NetWare 3.x, Personal Ware, Artisoft LANtastic больше подходят для небольших рабочих групп. В наиболее полном объеме перечисленным требованиям отвечает операционная система Windows NT Server. Ей присущи такие возможности, как: единая модель безопасности, приоритетная вытесняющая многозадачность, распределенное управление и распределенное исполнение, журнал регистрации событий системы, распределенное резервное копирование, средства удаленного доступа, поддержка большинства наиболее популярных сетевых протоколов и многое другое.

Это позволяет утверждать, что, наиболее предпочтительной моделью ЛВС является модель организации вычислительной сети на платформе Microsoft Windows NT Server. Такой выбор обусловлен возможностью несложного подключения существующего парка ПЭВМ ВУЗа к Windows NT Server и миграции в масштабируемую доменную архитектуру. Предлагаемый метод организации сети упрощает управление сетью и позволяет использовать платформу Microsoft для создания ЛВС любого масштаба.

Выбор логической архитектуры ЛВС определяется потребностями автономного доступа к ресурсам кафедр, подразделений обеспечения и курсантских подразделений пользователями. Но в ряде случаев пользователям ЛВС требуется доступ к ресурсам других подразделений и кафедр. Анализ пропускной способности линий, объединяющих подразделения, количества и вычислительной мощности компьютеров и наличия квалифицированного персонала на местах позволяет обосновать выбор способа построения иерархии сети по функциональному принципу. Организация взаимодействия сегментов сети и пользователей осуществляется созданием системы доверительных отношений между доменами в рамках двух­ярусной доменной модели. Поскольку все сетевые ресурсы должны быть избирательно доступны пользователям, то организация доверительных отношений должна проводиться в едином пользовательском контексте, при котором любой доменный пользователь должен иметь определенные уникальные права доступа во всех доменах, входящих в состав ЛВС.

Нужна помощь в написании доклада?

Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Правки вносим бесплатно.

Иерархическая двухъярусная модель сети предоставляет ряд дополнительных возможностей, основными из которых являются: возможность расширения ЛВС до неограниченного количества пользователей, возможность работы мобильных (не постоянных) пользователей, проведение распределенного администрирования, создание структуры доменов, полностью отражающей внутреннюю структуру и отношения между подразделениями и кафедрами ВУЗа. При этом имеется расширенные возможности создания системы резервных контроллеров доменов и их оптимального размещения, выбора главного и резервного броузера сети ВУЗа, а так же маршрутизации и планирования трафика, возникающего в различных сегментах сети.

И, наконец, для обеспечения возможности удовлетворения всем потребностям ВУЗа в структуре ЛВС должны присутствовать выделенные Helper—сервер, SQL—сервер и Distribution—сервер. В самом простом случае все вышеперечисленные дополнительные функции серверов могут исполняться одним сервером, однако для ВУЗов, имеющих разветвленную структуру и значительное число компьютеров, имеет смысл распределение нагрузки между несколькими серверами ЛВС.

Физическое интегрирование вычислительных средств ВУЗа в ЛВС осуществляется путем установки соответствующей сетевой аппаратуры, выбора и конфигурирования сетевых протоколов. Существует много причин, определяющих преимущество использования стандартного набора сетевых протоколов TCP/IP при организации сети ВУЗа, одно из которых является возможность маршрутизации пакетов в многосегментных сетях. При установке протоколов TCP/IP в целях уменьшения объема сетевого администрирования и повышения производительности в ЛВС на серверы уровня ВУЗа необходимо установить протокол динамической конфигурации хостов DHCP, сервис распознавания имен WINS и службу DNS, а на серверы уровня подразделений приложения релейного агента DHCP (DHCP Relay Agent) и сервис WINS. Установка этих служб позволит осуществить динамическое назначение всем компьютерам сети ВУЗа IP-адресов, обеспечить распознавание имен хостов. Вопросами установки служб и конфигурирования должны заниматься системные администраторы серверов уровня подразделений и уровня ВУЗа. На завершающей стадии обоснования программной составляющей ЛВС выбирается схема условного именования доменов, им назначаются уникальные имена, согласно принятым в WINS и DNS правилам именования.

Поскольку для построения физической компоненты (транспортной системы) ЛВС применяются технологии ETHERNET, в которых на физическом уровне обычно используется метод CSMA/CD (множественный доступ к среде с детектированием несущей и обнаружением конфликтов), то основной проблемой обеспечение максимальной эффективности функционирования сети являются коллизии. Как показывает практика, допустимый уровень коллизий в сети не более 15% от числа передаваемых кадров превышает уже для 20-25 рабочих станций объединенных технологией 10BASE-2 (коаксиальный кабель), и для 30-40 рабочих станций, объединенных технологией 10BASE-Т.

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

Описанный подход стал нормой при проектировании крупных сетей и полностью вытеснил сети, построенные исключительно на основе пассивных сегментов. Преимущества сетей с иерархически соединенным активным оборудованием не раз проверены на практике и сейчас никем не оспариваются. Таким образом, реализация приведенных выше рекомендации по оптимизации структуры ЛВС ВУЗа позволяет построить органичную, способную в дальнейшем к развитию и удовлетворяющую широкому кругу задач, решаемых подразделениями и кафедрами, ЛВС ВУЗа.

  • Для учеников 1-11 классов и дошкольников
  • Бесплатные сертификаты учителям и участникам

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

Описание презентации по отдельным слайдам:

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

И как сделать так, чтобы ребенку было интересно учиться?
Если ребенку интересно он будет думать, искать, спорить, сомневаться, а что для этого делать? Нужны такие условия, которые будут мотивировать ребенка на познавательную деятельность.

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

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

Әр нәрсе уақытымен қызықты.
Всё интересно в своё время.

Выбранный для просмотра документ доклад.docx

Слайд 2 Эпиграфом моего семинара станет высказывание Александра Исаевича Солженицына

Слайд 3 Наши дети это уже поколение центениалов , у них развито криптовое мышление (тип при котором человек воспринимает текст фрагментально) визуальное восприятие информации, а так как они хотят видеть результат сразу, быстро, они только узнали что это работает, а уже хотят узнать как это работает, и я должна им это показать за 40 мин.

• С эволюцией научно-технического прогресса жизнь человека и цивилизация в целом ускорились.

• Человечество в XXI веке столкнулось с проблемой катастрофической нехваткой времени.

• Современные технологии при правильном использовании позволяют увеличить продуктивность урока, за тот же период времени.

Слайд 5 И как сделать так, чтобы ребенку было интересно учиться?

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

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

• Одна из задач современного учителя — умение применять ИКТ и электронные технологии в процессе обучения наиболее уместно и эффективно. Кроме того это помогает созданию приемлемой и дружелюбной среды, к которой за рамками школы современный ребенок привык — "информация на базе гаджетов".

• Многие учителя воспринимают требование использовать ИКТ во время учебного процесса как дополнительную нагрузку.

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

Слайд 7 Чтобы реализовать в период одного урока вышеуказанное нужно применять определенные методы, которые позволяют не только оптимизировать, но и увеличить его продуктивность

Для оптимизации учебного процесса на своих уроках нужно использовать различные методы и приёмы таких современных педагогических технологий, как: (клик) групповые формы организации обучения, (клик) технологию критического мышления, (клик) игровую технологию, (клик) проектную деятельность, (клик) тестовую технологию, (клик) информационно-коммуникационные технологии, (клик) технологию проблемного обучения. О некоторых из них я хочу рассказать и показать их применение на уроках.

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

· (клик) Kahoot - бесплатная платформа для создания оценочных анкет. ,

· (клик) Plickers - это удобное приложение для молниеносной оценки знаний студентов прямо на уроке. Провести опрос целого класса можно буквально за полминуты. Все что вам нужно — это распечатанные листочки для каждого ученика в классе и свой телефон

· (клик) Triventy- это бесплатный сервис для создания обучающих игр и викторин.

Мы можем играя в данных сервисах, начать урок и резюмировать знания детей по последнему пройденному материалу, или использовать его как нестандартный способ провести опрос посреди объяснения нового материала.

при работе с этими порталами применяется групповая форма обучения, а так же возможно получение моментального результата.

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

(Универсальные учебные действия (УУД) — базовый элемент умения учиться; совокупность способов действий учащегося и навыков учебной работы, обеспечивающих его возможностью самостоятельно развиваться и совершенствоваться в направлении желаемого социального опыта на протяжении всей жизни.)

Слайд 9 Играю с жюри

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

Слайд 11 Вместо устного объяснения нового материала мы можем использовать красочный и лаконичный видеоролик, который увлечет учеников. Например сайты РЭШ и УЧИ.ру

Слайд 12 Для презентаций, обучения, тренингов и командных встреч можно использовать:

(клик) AhaSlides - это универсальный инструмент для презентаций, обучения и тренингов. Это простой в использовании портал. Данное приложение можно использовать и в качестве изучения нового материала на дистанционной форме обучения, либо как домашнее задание.

(клик) Pixton - инструмент для создания комиксов, использовать для изучения блока графики.

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

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

Подготовка к уроку с использованием ИКТ отнимает отнюдь не больше времени, нежели подготовка привычного урока с раздаточными материалами и проверкой тетрадей. А вот уровень усвоения знаний и настроение учащихся будут значительно выше. Можно сказать, что использование ИКТ являются эффективным дополнительным средством, позволяющим разнообразить инструментарий средств, применяемых учителем во время урока.

Некоторые задачи часто могут быть выполнены более эффективно. Например, рассмотрим следующую программу на языке Си, которая суммирует все целые числа от 1 до N:

Этот код может быть (подразумевая, что нет переполнения) переписан, используя математическую формулу, в следующем виде:

Уступки (tradeoffs)

Оптимизация в основном фокусируется на одиночном или повторном времени выполнения, использовании памяти, дискового пространства, пропускной способности или некотором другом ресурсе. Это обычно требует Различные области

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

В программировании, оптимизация обычно обозначает модификацию кода и его Узкие места

Для оптимизации требуется найти Простейшие приёмы оптимизации программ по затратам процессорного времени

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

Инициализация объектов данных

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

Программирование арифметических операций

<\displaystyle ax^<4></p>
<p>В том случае когда значительная часть времени работы программы отводится арифметическим вычислениям, немалые резервы повышения скорости работы программы таятся в правильном программировании арифметических (и логических) выражений. Важно понимать, что различные арифметические операции значительно различаются по быстродействию. Самыми быстрыми являются операции сложения и вычитания. Более медленным является умножение, затем идет деление. Относительно много времени тратится на обращение к подпрограммам. Быстродействие также зависит и от типа операндов. Например, в языке +bx^+cx^+dx+e>

При условии, что вычисление степени производится перемножением основания определенное число раз, нетрудно найти, что в этом выражении содержится 10 умножений ("медленных" операций) и 4 сложения ("быстрых" операций). Это же самое выражение можно записать в виде:

<\displaystyle (((ax+b)x+c)x+d)x+e></p>
<p>

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

Циклы

Различается и время выполнения циклов разного типа. Время выполнения цикла со счетчиком и цикла с постусловием при всех прочих равных условиях совпадает, цикл с предусловием выполняется несколько дольше (примерно на 20-30 %).

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

Этот цикл выполняется примерно на 10 % дольше, чем следующий:

На первый взгляд, и в первом и во втором случае 10 000 000 раз выполняется оператор присваивания, и затраты времени на это должны быть одинаковы в обеих случаях. Но это не так. Объясняется наше наблюдение тем, что инициализации цикла, то есть обработка процессором его заголовка с целью определения начального и конечного значений счетчика, а также шага приращения счетчика требует времени. В первом случае 1 раз инициализируется внешний цикл и 100 000 раз - внутренний, то есть всего выполняется 100 001 инициализация. Во втором случае, как нетрудно подсчитать, таких инициализаций оказывается всего лишь 1001.

Аналогично ведут себя вложенные циклы с предусловием и с постусловием. Можно сделать вывод, что при программировании вложенных циклов по возможности следует делать цикл с наибольшим числом повторений самым внутренним, а цикл с наименьшим числом повторений - самым внешним.

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

Очевидно, что другая форма записи этого цикла оказывается более экономной:

Инвариантные фрагменты кода

Тема оптимизации инвариантных фрагментов кода тесно связана с проблемой оптимального программирования циклов. Внутри цикла могут встречаться выражения, фрагменты которых никак не зависят от управляющей переменной цикла. Их называют инвариантными фрагментами кода. Современные компиляторы часто определяют наличие таких фрагментов и выполняют их автоматическую оптимизацию. Такое возможно не всегда, и иногда производительность программы зависит целиком от того, как запрограммирован цикл. В качестве примера рассмотрим следующий фрагмент программы (язык

Здесь инвариантными фрагментами кода являются слагаемое Sin(x * k * i) в первом цикле по переменной m и операция деления на элемент массива c[k] во втором цикле по m. Значения синуса и элемента массива не изменяются в цикле по переменной m, следовательно, в первом случае можно вычислить значение синуса и присвоить его вспомогательной переменной, которая будет использоваться в выражении, находящемся внутри цикла. Во втором случае можно выполнить деление после завершения цикла по m. Таким образом можно существенно сократить количество трудоемких арифметических операций.

См. также

  • Принцип KISS
  • Граф передачи управления
  • Низкоуровневая виртуальная машина
  • Симулятор
  • Ссылки

Литература

  • Jon Bentley . Writing Efficient Programs. ISBN 0-13-970251-2
  • ISBN 0-201-89683-4
  • ISBN 0-201-89684-2
  • ISBN 0-201-89685-0
  • ISBN 5-94723-702-4

Эта страница использует содержимое раздела Википедии на русском языке. Оригинальная статья находится по адресу: Оптимизация (информатика). Список первоначальных авторов статьи можно посмотреть в истории правок. Эта статья так же, как и статья, размещённая в Википедии, доступна на условиях CC-BY-SA .

Читайте также: