Многосторонняя ветвь - это изменение потока управления программой на основе значения, соответствующего выбранному критерию. Это форма условного утверждения . Многосторонняя ветвь часто является наиболее эффективным методом передачи управления одной из наборов программных меток , особенно если индекс был создан заранее из необработанных данных .
Примеры
- Таблица ответвлений
- Оператор переключения - см. Также альтернативы ниже
- Множественная отправка - когда вызывается подпрограмма и делается возврат
Альтернативы
Многостороннюю ветвь часто можно заменить эффективным поиском в индексированной таблице (с использованием самого значения данных или вычисленной производной значения данных в качестве индекса массива ) [1]
" ... реализация оператора switch была приравнена к реализации многостороннего ветвления. Однако для многих случаев использования оператора switch в реальном коде можно полностью избежать ветвления и заменить переключатель одним или несколькими таблицами. -ups. Например,
Has30Days
пример [представленный ранее] может быть реализован следующим образом: [Пример C] "
"Супероптимизаторный анализ генерации кода с несколькими ветвями" Роджер Энтони Сэйл
switch ( x ) { / * x - номер месяца * / case 4 : / * апрель * / case 6 : / * июнь * / case 9 : / * сентябрь * / case 11 : / * ноябрь * / return true ; }
можно заменить, используя технику "безопасного хеширования", на -
беззнаковое int t = x | 2 ; переключатель ( t ) { case 6 : case 11 : return true ; }
или его можно заменить, используя поиск в таблице сопоставления индексов , на -
х % = 12 ; / * чтобы гарантировать, что x находится в диапазоне 0-11 * / static const int T [ 12 ] = { 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 }; / * Таблица с отсчетом от 0 'if 30 days = 1, else 0' * / return T [ x ]; / * возврат с логическим значением 1 = true, 0 = false * /
(ввиду простоты последнего случая было бы предпочтительнее реализовать его в режиме онлайн, поскольку накладные расходы на использование вызова функции могут быть больше, чем сам индексированный поиск.)
Котировки
Многостороннее ветвление - важный метод программирования, который слишком часто заменяется неэффективной последовательностью if-тестов. Питер Наур недавно написал мне, что он считает использование таблиц для управления потоком программы основной идеей информатики, которая была почти забыта; но он ожидает, что в любой день он будет готов для повторного открытия. Это ключ к эффективности всех лучших компиляторов, которые я изучал.
- Дональд Кнут , Структурированное программирование с использованием операторов перехода к инструкциям.
Смотрите также
Рекомендации
- ^ «Архивная копия» (PDF) . Архивировано из оригинального (PDF) 27 февраля 2012 года . Проверено 18 ноября 2009 .CS1 maint: заархивированная копия как заголовок ( ссылка )
Внешние ссылки
- Кодирование многопутевых ветвей с использованием настраиваемых хеш-функций, автор HG Dietz
- Изучение Python от Марка Лутца
- Программирование на C ++ Нелл Б. Дейл, Чип Уимс
- Анализ супероптимизатора генерации кода многосторонних ветвей , Роджер Энтони Сэйл