Многоходовая ветка - Multiway branch

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

Примеры

Альтернативы

Многостороннее ветвление часто можно заменить эффективным индексированным поиск в таблице (с использованием самого значения данных или вычисленной производной значения данных в качестве индекса массив )[1]

"... реализация оператора switch была приравнена к реализации многосторонней ветки. Однако для многих случаев использования оператора switch в реальном коде можно полностью избежать ветвления и заменить переключатель одним или несколькими поисками по таблице. Например, Has30Days пример [представленный ранее] может быть реализован следующим образом: [пример C] "

«Супероптимизаторный анализ генерации кода с несколькими ветвями» Роджер Энтони Сэйл

 переключатель (Икс) {                     / * x - номер месяца * /   кейс 4:                        /* Апреля         */                                кейс 6:                        / * Июнь * /   кейс 9:                        /* Сентябрь     */   кейс 11:                       / * Ноябрь * /   вернуть правда; }

можно заменить, используя метод "безопасного хеширования", на -

 беззнаковый int т = Икс | 2; переключатель (т) {   кейс 6:   кейс 11:   вернуть правда; }

или его можно заменить, используя отображение индекса поиск по таблице, с -

 Икс %= 12;                                           / * чтобы убедиться, что x находится в диапазоне 0-11 * /                                                  статический const int Т[12] ={0,0,0,0,1,0,1,0,0,1,0,1}; / * Таблица с отсчетом от 0 'если 30 дней = 1, иначе 0' * / вернуть Т[Икс];                                       / * возврат с логическим значением 1 = true, 0 = false * /

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

Котировки

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

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

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

использованная литература

  1. ^ «Архивная копия» (PDF). Архивировано из оригинал (PDF) на 2012-02-27. Получено 2009-11-18.CS1 maint: заархивированная копия как заголовок (ссылка на сайт)

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