Jump to content

Существенная сложность

Эссенциальная сложность — это численная мера, определенная Томасом Дж. Маккейбом-старшим в его широко цитируемой статье 1976 года, более известной благодаря введению цикломатической сложности . Маккейб определил существенную сложность как циклическую сложность сокращенного CFG ( графа потока управления ) после итеративной замены (сокращения) всех структурного программирования управляющих структур , то есть тех, которые имеют одну точку входа и одну точку выхода (например, if-then-else). и циклы while) с отдельными операторами-заполнителями. [1] : 317  [2] : 80 

Процесс сокращения МакКейба предназначен для моделирования концептуальной замены структур управления (и фактических операторов, которые они содержат) вызовами подпрограмм, отсюда и требование, чтобы структуры управления имели одну точку входа и одну точку выхода. [1] : 317  (В настоящее время подобный процесс подпадает под общий термин « рефакторинг» .) Очевидно, что все структурированные программы имеют существенную сложность 1, как это определено Маккейбом, поскольку все они могут быть итеративно сведены к одному вызову подпрограммы верхнего уровня. [1] : 318  Как объясняет Маккейб в своей статье, его основная метрика сложности была разработана для того, чтобы измерить, насколько далека от этого идеала (полностью структурирована) данная программа. [1] : 317  Таким образом, существенные числа сложности больше 1, которые можно получить только для неструктурированных программ, указывают на то, что они находятся дальше от идеала структурированного программирования. [1] : 317 

Чтобы избежать путаницы между различными понятиями сводимости к структурированным программам, важно отметить, что статья Маккейба кратко обсуждает, а затем оперирует в контексте статьи С. Рао Косараджу 1973 года , в которой дано уточнение (или альтернативный взгляд) на структурированную программу. теорема . В основополагающей статье Бема и Якопини 1966 года было показано, что все программы могут быть [пере]писаны с использованием только конструкций структурированного программирования (также известных как структуры D: последовательность, if-then-else и цикл while), однако при преобразовании случайного программу в структурированную программу, возможно, потребуется ввести дополнительные переменные (и использовать их в тестах), а некоторый код может быть дублирован. [3]

В своей статье Бём и Якопини предположили, но не доказали, что необходимо вводить такие дополнительные переменные для некоторых видов неструктурированных программ, чтобы преобразовать их в структурированные программы. [4] : 236  Пример программы (как мы теперь знаем) действительно требует таких дополнительных переменных — это цикл с двумя условными выходами внутри него. Чтобы ответить на гипотезу Бема и Якопини, Косараджу определил более ограничительное понятие редукции программы, чем эквивалентность Тьюринга, используемую Бёмом и Якопини. По сути, понятие редукции Косараджу налагает, помимо очевидного требования, что две программы должны вычислять одно и то же значение (или не завершать работу) при одних и тех же входных данных, что две программы должны использовать одни и те же примитивные действия и предикаты, последние понимаются как используемые выражения. в условных предложениях. Из-за этих ограничений сокращение Косараджу не позволяет вводить дополнительные переменные; присвоение этим переменным привело бы к созданию новых примитивных действий, а проверка их значений изменила бы предикаты, используемые в условных выражениях. Используя это более ограничительное понятие редукции, Косараджу доказал гипотезу Бема и Якопини, а именно, что цикл с двумя выходами не может быть преобразован в структурированную программу. не вводя дополнительных переменных , но пошел дальше и доказал, что программы, содержащие многоуровневые разрывы (из циклов), образуют иерархию, такую, что всегда можно найти программу с многоуровневыми разрывами глубины n , которую невозможно свести к программе из нескольких -уровневые разрывы с глубиной меньше n , опять же без введения дополнительных переменных. [4] [5]

Маккейб отмечает в своей статье, что, учитывая результаты Косараджу, он намеревался найти способ отразить основные свойства неструктурированных программ в терминах их графов потока управления. [1] : 315  Он начинает с того, что сначала идентифицирует графы потока управления, соответствующие наименьшим неструктурированным программам (к ним относятся ветвление в цикл, ветвление из цикла и их аналоги «если-то-иначе»), которые он использует для формулировки теоремы, аналогичной Куратовского , и после этого он вводит свое понятие существенной сложности, чтобы дать масштабный ответ («мера структурированности программы», по его словам), а не ответ «да/нет» на вопрос о том, является ли поток управления программой график структурирован или нет. [1] : 315  Наконец, понятие сокращения, используемое Маккейбом для сокращения CFG, не то же самое, что понятие Косараджу о сокращении блок-схем. Сокращение, определенное в CFG, не знает и не заботится о входных данных программы, это просто преобразование графа . [6]

Например, следующий фрагмент программы на языке C имеет существенную сложность, равную 1, поскольку внутренний оператор if и for можно сократить, т. е. это структурированная программа.

   for (i = 0; i < 3; i++) {
      if (a[i] == 0) b[i] += 2;
   }

Следующий фрагмент программы на языке C имеет сложность, равную четырем; его CFG неприводим. Программа находит первую строку z, которая полностью равна нулю, и помещает этот индекс в i; если его нет, в i помещается -1.

   for (i = 0; i < m; i++) {
      for (j = 0; j < n; j++) {
         if (z[i][j] != 0)
            goto non_zero;
      }
      goto found;
non_zero:
   }
   i = -1;
found:

Идея сводимости CFG путем последовательного коллапса подграфов (в конечном итоге до одного узла для корректных CFG) также используется в современной оптимизации компилятора. Однако понятие структуры управления с одним входом и одним выходом из структурного программирования заменяется понятием естественного цикла , который определяется как «цикл с одним входом и несколькими выходами, имеющий только одну ветвь, ведущую обратно к входу изнутри». это". Области CFG, которые не могут быть сведены к естественным петлям, называются несобственными областями ; эти регионы в конечном итоге имеют довольно простое определение: множественные, сильно связанные компоненты CFG. Таким образом, простейшая несобственная область представляет собой цикл с двумя точками входа. Множественные выходы не вызывают проблем анализа в современных компиляторах. Неправильные регионы (множественные входы в циклы) вызывают дополнительные трудности при оптимизации кода. [7]

См. также

[ редактировать ]
  1. ^ Jump up to: а б с д и ж г Маккейб (декабрь 1976 г.). «Мера сложности». Транзакции IEEE по разработке программного обеспечения (4): 308–320. дои : 10.1109/tse.1976.233837 . S2CID   9116234 .
  2. ^ http://www.mccabe.com/pdf/mccabe-nist235r.pdf [ только URL-адрес PDF ]
  3. ^ Дэвид Энтони Ватт; Уильям Финдли (2004). Концепции проектирования языков программирования . Джон Уайли и сыновья. п. 228. ИСБН  978-0-470-85320-7 .
  4. ^ Jump up to: а б С. Рао Косараджу (декабрь 1974 г.). «Анализ структурированных программ». Журнал компьютерных и системных наук . 9 (3): 232–255. дои : 10.1016/S0022-0000(74)80043-7 .
  5. ^ Более современную трактовку тех же результатов см.: Козен, Теорема Бема – Якопини ложна, пропозиционально.
  6. ^ Маккейб делает сноски к двум определениям на страницах 315 и 317.
  7. ^ Стивен С. Мучник (1997). Расширенная реализация проекта компилятора . Морган Кауфманн. стр. 196–197 и 215 . ISBN  978-1-55860-320-2 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ce63786b52d00d2ca7fe99960c81baed__1709668020
URL1:https://arc.ask3.ru/arc/aa/ce/ed/ce63786b52d00d2ca7fe99960c81baed.html
Заголовок, (Title) документа по адресу, URL1:
Essential complexity - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)