Многоходовая ветка - 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-тестов. Питер Наур недавно написал мне, что он считает использование таблиц для управления потоком программы основной идеей информатики, которая была почти забыта; но он ожидает, что в любой день он будет готов для повторного открытия. Это ключ к эффективности всех лучших компиляторов, которые я изучал.

-  Дональд Кнут , Структурированное программирование с использованием операторов перехода к инструкциям

Смотрите также

Ссылки

внешние ссылки