In complexity theory, the class NC (for "Nick's Class") is the set of decision problems decidable in polylogarithmic time on a parallel computer with a polynomial number of processors. In other words, a problem is in NC if there exist constants ''c'' and ''k'' such that it can be solved in time ''O''(log''c'' ''n'') using ''O''(''n''''k'') parallel processors. Stephen Cook coined the name "Nick's class" after Nick Pippenger,〔Arora & Barak (2009) p.120〕 who had done extensive research on circuits with polylogarithmic depth and polynomial size.
Just as the class P can be thought of as the tractable problems (Cobham's thesis), so NC can be thought of as the problems that can be efficiently solved on a parallel computer.〔Arora & Barak (2009) p.118〕 NC is a subset of P because polylogarithmic parallel computations can be simulated by polynomial-time sequential ones. It is unknown whether NC = P, but most researchers suspect this to be false, meaning that there are probably some tractable problems that are "inherently sequential" and cannot significantly be sped up by using parallelism. Just as the class NP-complete can be thought of as "probably intractable", so the class P-complete, when using NC reductions, can be thought of as "probably not parallelizable" or "probably inherently sequential".
The parallel computer in the definition can be assumed to be a ''parallel, random-access machine'' (PRAM). That is a parallel computer with a central pool of memory, and any processor can access any bit of memory in constant time. The definition of NC is not affected by the choice of how the PRAM handles simultaneous access to a single bit by more than one processor. It can be CRCW, CREW, or EREW. See PRAM for descriptions of those models.
Equivalently, NC can be defined as those decision problems decidable by a uniform Boolean circuit (which can be calculated from the length of the input) with polylogarithmic depth and a polynomial number of gates.
RNC is a class extending NC with access to randomness.
== Problems in NC ==
As with P, by a slight abuse of language, one might classify function problems and search problems as being in NC. NC is known to include many problems, including
* Integer addition, multiplication and division;
* Matrix multiplication, determinant, inverse, rank;
* Polynomial GCD, by a reduction to linear algebra using Sylvester matrix
* Finding a maximal matching.
Often algorithms for those problems had to be separately invented and could not be naïvely adapted from well-known algorithms – Gaussian elimination and Euclidean algorithm rely on operations performed in sequence. One might contrast ripple carry adder with a carry-lookahead adder.
抄文引用元・出典: フリー百科事典『 ウィキペディア（Wikipedia）』