В теории вычислительной сложности класс NC (от «Класс Ника») — это множество задач принятия решений , разрешимых за полилогарифмическое время на параллельном компьютере с полиномиальным числом процессоров. Другими словами, задача с размером входных данных n находится в NC , если существуют константы c и k, такие, что она может быть решена за время O ((log n ) c ) с использованием O ( n k ) параллельных процессоров. Стивен Кук [1] [2] придумал название «Класс Ника» в честь Ника Пиппенгера , который провел обширные исследования [3] схем с полилогарифмической глубиной и полиномиальным размером. [4]
Так же, как класс P можно рассматривать как разрешимые проблемы ( тезис Кобхэма ), так и NC можно рассматривать как проблемы, которые могут быть эффективно решены на параллельном компьютере. [5] NC является подмножеством P , поскольку полилогарифмические параллельные вычисления могут быть смоделированы последовательными вычислениями с полиномиальным временем. Неизвестно, является ли NC = P , но большинство исследователей подозревают, что это неверно, что означает, что, вероятно, существуют некоторые разрешимые проблемы, которые являются «последовательными по своей сути» и не могут быть значительно ускорены с помощью параллелизма. Так же, как класс NP-complete можно рассматривать как «вероятно неразрешимый», так и класс P-complete при использовании сокращений NC можно рассматривать как «вероятно непараллелизуемый» или «вероятно по своей сути последовательный».
Параллельный компьютер в определении можно считать параллельной машиной с произвольным доступом ( PRAM ). Это параллельный компьютер с центральным пулом памяти, и любой процессор может получить доступ к любому биту памяти за постоянное время. Определение NC не зависит от выбора того, как PRAM обрабатывает одновременный доступ к одному биту более чем одним процессором. Это может быть CRCW, CREW или EREW. См. PRAM для описания этих моделей.
Эквивалентно, NC можно определить как те задачи принятия решений, которые разрешимы с помощью однородной булевой схемы (которую можно вычислить по длине входных данных; для NC мы предполагаем, что можем вычислить булеву схему размера n в логарифмическом пространстве за n ) с полилогарифмической глубиной и полиномиальным числом вентилей с максимальным коэффициентом объединения по входу, равным 2.
RNC — это класс, расширяющий NC с доступом к случайности.
Как и в случае с P , при небольшом злоупотреблении языком можно было бы классифицировать функциональные проблемы и проблемы поиска как относящиеся к NC . Известно, что NC включает в себя множество проблем, включая
Часто алгоритмы для этих задач приходилось изобретать отдельно, и их нельзя было наивно адаптировать из известных алгоритмов – Гауссово исключение и Евклидов алгоритм полагаются на операции, выполняемые последовательно. Можно было бы противопоставить сумматор с волновым переносом сумматору с переносом и опережающим сумматором .
Примером проблемы в NC 1 является проверка четности в строке битов. [6] Задача состоит в подсчете количества единиц в строке, состоящей из 1 и 0. Простое решение состоит в суммировании всех битов строки. Поскольку сложение ассоциативно, . Рекурсивно применяя это свойство, можно построить двоичное дерево длины , в котором каждая сумма между двумя битами и выражается с помощью базовых логических операторов , например, через булево выражение .
NC i — это класс задач принятия решений, разрешимых с помощью однородных булевых схем с полиномиальным числом вентилей не более двух входов и глубиной O ((log n ) i ) , или класс задач принятия решений, разрешимых за время O ((log n ) i ) на параллельном компьютере с полиномиальным числом процессоров. Очевидно, что мы имеем
что образует NC -иерархию.
Мы можем связать классы NC с классами пространств L и NL [7] и AC . [8]
Классы NC связаны с классами AC, которые определяются аналогично, но с вентилями, имеющими неограниченный входящий поток. Для каждого i имеем [5] [8]
Как непосредственное следствие этого, имеем, что NC = AC . [9] Известно, что оба включения строгие при i = 0. [5]
Аналогично, мы имеем, что NC эквивалентно задачам, решаемым на чередующейся машине Тьюринга, ограниченной максимум двумя вариантами на каждом шаге с O (log n ) пространства и чередованиями. [10]
Один из главных открытых вопросов в теории сложности заключается в том, является ли каждое включение в иерархии NC правильным. Пападимитриу заметил, что если NC i = NC i +1 для некоторого i , то NC i = NC j для всех j ≥ i , и в результате NC i = NC . Это наблюдение известно как коллапс NC -иерархии, потому что даже единственное равенство в цепочке включений
подразумевает, что вся иерархия NC "схлопывается" до некоторого уровня i . Таким образом, есть 2 возможности:
Широко распространено мнение, что имеет место (1), хотя никаких доказательств истинности ни одного из утверждений пока не обнаружено.
Специальный класс NC 0 работает только с постоянной длиной входных битов. Поэтому он описывается как класс функций, определяемых однородными булевыми схемами с постоянной глубиной и ограниченным фан-входом.
Ветвящаяся программа с n переменными ширины k и длины m состоит из последовательности m инструкций. Каждая из инструкций представляет собой кортеж ( i , p , q ), где i — индекс проверяемой переменной (1 ≤ i ≤ n ), а p и q — функции от {1, 2, ..., k } до {1, 2, ..., k }. Числа 1, 2, ..., k называются состояниями ветвящейся программы. Программа изначально запускается в состоянии 1, и каждая инструкция ( i , p , q ) изменяет состояние с x на p ( x ) или q ( x ), в зависимости от того, равна ли i -я переменная 0 или 1. Функция, отображающая вход в конечное состояние программы, называется выходом программы (точнее, выход на входе — это функция, отображающая любое начальное состояние в соответствующее конечное состояние). Программа принимает набор значений переменных, когда существует некоторый набор функций, такой что последовательность переменных находится в A именно тогда , когда ее выход находится в F.
Семейство ветвящихся программ состоит из ветвящейся программы с n переменными для каждого n . Она принимает язык, когда программа с n переменными принимает язык, ограниченный длиной n входов.
Легко показать, что каждый язык L на {0,1} может быть распознан семейством ветвящихся программ ширины 5 и экспоненциальной длины или семейством экспоненциальной ширины и линейной длины.
Каждый регулярный язык на {0,1} может быть распознан семейством ветвящихся программ постоянной ширины и линейного числа инструкций (поскольку DFA может быть преобразован в ветвящуюся программу). BWBP обозначает класс языков, распознаваемых семейством ветвящихся программ ограниченной ширины и полиномиальной длины. [11]
Теорема Баррингтона [12] утверждает, что BWBP — это в точности неравномерная NC 1 . Доказательство использует неразрешимость симметрической группы S 5 . [11]
Теорема довольно удивительна. Например, она подразумевает, что функция большинства может быть вычислена семейством ветвящихся программ постоянной ширины и полиномиального размера, в то время как интуиция может подсказать, что для достижения полиномиального размера необходимо линейное число состояний.
Разветвленную программу постоянной ширины и полиномиального размера можно легко преобразовать (с помощью принципа «разделяй и властвуй») в схему в NC 1 .
Наоборот, предположим, что дана схема в NC 1. Без потери общности предположим, что она использует только вентили И и НЕ.
Лемма 1 — Если существует разветвляющаяся программа, которая иногда работает как перестановка P , а иногда как перестановка Q , то, умножая перестановки в первой инструкции справа на α , а в последней инструкции умножая слева на β , мы можем создать схему той же длины, которая ведет себя как β P α или β Q α соответственно.
Назовем разветвленную программу α-вычислением схемы C, если она работает как тождество, когда выход C равен 0, и как α , когда выход C равен 1.
Как следствие леммы 1 и того факта, что все циклы длины 5 сопряжены , для любых двух 5-циклов α , β , если существует ветвящаяся программа, α-вычисляющая схему C , то существует ветвящаяся программа, β-вычисляющая схему C , той же длины.
Лемма 2. Существуют 5-циклы γ , δ такие, что их коммутатор ε = γδγ −1 δ −1 является 5-циклом. Например, γ = (1 2 3 4 5), δ = (1 3 5 4 2), что дает ε = (1 3 2 5 4).
Теперь докажем теорему Баррингтона методом индукции:
Предположим, что у нас есть схема C , которая принимает входы x 1 ,..., x n и предположим, что для всех подсхем D схемы C и 5-циклов α существует ветвящаяся программа α-вычисления D. Мы покажем, что для всех 5-циклов α существует ветвящаяся программа α-вычисления C.
Предположив, что подсхемы имеют разветвленные программы, так что они являются α -вычислительными для всех 5-циклов α ∈ S 5 , мы показали, что C также обладает этим свойством, как и требовалось.
Размер программы ветвления не более 4 d , где d — глубина схемы. Если схема имеет логарифмическую глубину, программа ветвления имеет полиномиальную длину.