One of the primary problems with an origami system is assigning functions to each of the PEs so that a task can be performed efficiently with a minimal amount of hardware. Standard compiler techniques can be used to generate data flow graphs from computer languages, but creating an origami array from the logic functions produced is a difficult problem. In many ways it is analogous to the generalized two-dimensional electrical circuit layout problem (e.g. the automatic routing of wires on a printed circuit board), but it is sufficiently different that circuit layout algorithms are not directly applicable. The problem of finding an optimal placement and routing is considered to be NP-complete.