Многоходовая ветка - Multiway branch
Многосторонняя ветвь - это изменение потока управления программой на основе значения, соответствующего выбранному критерию. Это форма условного утверждения . Многостороннее ветвление часто является наиболее эффективным методом передачи управления одной из наборов программных меток , особенно если индекс был создан заранее из необработанных данных .
Примеры
- Таблица ответвлений
- Оператор переключения - см. Также альтернативы ниже
- Множественная отправка - когда вызывается подпрограмма и производится возврат
Альтернативы
Многосторонняя ветвь часто может быть заменена эффективным поиском в индексированной таблице (с использованием самого значения данных или вычисленной производной значения данных в качестве индекса массива )
" ... реализация оператора switch была приравнена к реализации многостороннего ветвления. Однако для многих случаев использования оператора switch в реальном коде можно полностью избежать ветвления и заменить переключатель одним или несколькими таблицами. -ups. Например,
Has30Days
пример [представленный ранее] может быть реализован следующим образом: [Пример C] "
"Анализ супероптимизатора генерации кода многосторонних ветвей" Роджер Энтони Сэйл
switch (x) { /* x is month no */
case 4: /* April */
case 6: /* June */
case 9: /* September */
case 11: /* November */
return true;
}
можно заменить, используя метод "безопасного хеширования", на -
unsigned int t = x | 2;
switch (t) {
case 6:
case 11:
return true;
}
или его можно заменить, используя поиск в таблице сопоставления индексов , на -
x %= 12; /* to ensure x is in range 0-11*/
static const int T[12] ={0,0,0,0,1,0,1,0,0,1,0,1}; /* 0-based table 'if 30 days =1,else 0' */
return T[x]; /* return with boolean 1 = true, 0=false */
(ввиду простоты последнего случая было бы предпочтительнее реализовать его в строке, поскольку накладные расходы на использование вызова функции могут быть больше, чем сам индексированный поиск.)
Котировки
Многостороннее ветвление - это важный метод программирования, который слишком часто заменяется неэффективной последовательностью if-тестов. Питер Наур недавно написал мне, что он считает использование таблиц для управления потоком программы основной идеей информатики, которая была почти забыта; но он ожидает, что в любой день он будет готов для повторного открытия. Это ключ к эффективности всех лучших компиляторов, которые я изучал.
- Дональд Кнут , Структурированное программирование с использованием операторов перехода к инструкциям
Смотрите также
Ссылки
внешние ссылки
- Кодирование многопутевых ветвей с использованием настраиваемых хеш-функций, автор HG Dietz
- Изучение Python от Марка Лутца
- Программирование на C ++ Нелл Б. Дейл, Чип Уимс
- Анализ супероптимизатора генерации кода многосторонних ветвей , Роджер Энтони Сэйл