Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Deterministic algorithm

From Wikipedia, the free encyclopedia
Type of algorithm in computer science
Not to be confused withIdempotency.

Incomputer science, adeterministic algorithm is analgorithm that, given a particular input, will always produce the same output, with the underlying machine always passing through the same sequence of states. Deterministic algorithms are by far the most studied and familiar kind of algorithm, as well as one of the most practical, since they can be run on real machines efficiently.

Formally, a deterministic algorithm computes amathematical function; a function has a unique value for any input in itsdomain, and the algorithm is a process that produces this particular value as output.

Formal definition

[edit]

Deterministic algorithms can be defined in terms of astate machine: astate describes what a machine is doing at a particular instant in time. State machines pass in a discrete manner from one state to another. Just after we enter the input, the machine is in itsinitial state orstart state. If the machine is deterministic, this means that from this point onwards, its current state determines what its next state will be; its course through the set of states is predetermined. Note that a machine can be deterministic and still never stop or finish, and therefore fail to deliver a result.

Examples of particularabstract machines which are deterministic include thedeterministic Turing machine anddeterministic finite automaton.

Non-deterministic algorithms

[edit]

A variety of factors can cause an algorithm to behave in a way which is not deterministic, or non-deterministic:

  • If it uses an external state other than the input, such as user input, aglobal variable, a hardware timer value, arandom value, or stored disk data.
  • If it operates in a way that is timing-sensitive, for example, if it has multiple processors writing to the same data at the same time. In this case, the precise order in which each processor writes its data will affect the result.
  • If a hardware error causes its state to change in an unexpected way.

Although real programs are rarely purely deterministic, it is easier for humans as well as other programs to reason about programs that are. For this reason, mostprogramming languages and especiallyfunctional programming languages make an effort to prevent the above events from happening except under controlled conditions.

The prevalence ofmulti-core processors has resulted in a surge of interest in determinism in parallel programming and challenges of non-determinism have been well documented.[1][2] A number of tools to help deal with the challenges have been proposed[3][4][5][6] to deal withdeadlocks andrace conditions.

Disadvantages of determinism

[edit]

It is advantageous, in some cases, for a program to exhibit nondeterministic behavior. The behavior of a card shuffling program used in a game ofblackjack, for example, should not be predictable by players — even if the source code of the program is visible. The use of apseudorandom number generator is often not sufficient to ensure that players are unable to predict the outcome of a shuffle. A clever gambler might guess precisely the numbers the generator will choose and so determine the entire contents of the deck ahead of time, allowing him to cheat; for example, the Software Security Group at Reliable Software Technologies was able to do this for an implementation of Texas Hold 'em Poker that is distributed by ASF Software, Inc, allowing them to consistently predict the outcome of hands ahead of time.[7] These problems can be avoided, in part, through the use of acryptographically secure pseudo-random number generator, but it is still necessary for an unpredictablerandom seed to be used to initialize the generator. For this purpose, a source of nondeterminism is required, such as that provided by ahardware random number generator.

Note that a negative answer to theP=NP problem would not imply that programs with nondeterministic output are theoretically more powerful than those with deterministic output. The complexity classNP (complexity) can be defined without any reference to nondeterminism using theverifier-based definition.

Determinism categories in languages

[edit]

Mercury

[edit]

Themercury logic-functional programming language establishes different determinism categories for predicate modes as explained in the reference.[8][9]

Haskell

[edit]

Haskell provides several mechanisms:

  • Non-determinism or notion of Fail
    • theMaybe andEither types include the notion of success in the result.
    • thefail method of the class Monad, may be used to signalfail as exception.
    • the Maybemonad and MaybeT monad transformer provide for failed computations (stop the computation sequence and return Nothing)[10]
  • Neterminism/non-det with multiple solutions
    • you may retrieve all possible outcomes of a multiple result computation, by wrapping its result type in a MonadPlusmonad. (its methodmzero makes an outcome fail andmplus collects the successful results).[11]

ML family and derived languages

[edit]

As seen inStandard ML,OCaml andScala

  • Theoption type includes the notion of success.

Java

[edit]

InJava, thenull reference value may represent an unsuccessful (out-of-domain) result.

See also

[edit]

References

[edit]
  1. ^Edward A. Lee."The Problem with Threads"(PDF). Retrieved2009-05-29.
  2. ^Bocchino Jr., Robert L.; Adve, Vikram S.; Adve, Sarita V.; Snir, Marc (2009).Parallel Programming Must Be Deterministic by Default.USENIX Workshop on Hot Topics in Parallelism.
  3. ^"Intel Parallel Inspector Thread Checker". Retrieved2009-05-29.
  4. ^Yuan Lin."Data Race and Deadlock Detection with Sun Studio Thread Analyzer"(PDF). Retrieved2009-05-29.
  5. ^Intel."Intel Parallel Inspector". Retrieved2009-05-29.
  6. ^David Worthington."Intel addresses development life cycle with Parallel Studio". Archived fromthe original on 2009-05-28. Retrieved2009-05-26.
  7. ^McGraw, Gary;Viega, John."Make your software behave: Playing the numbers: How to cheat in online gambling".IBM. Archived fromthe original on 2008-03-13. Retrieved2007-07-02.
  8. ^"Determinism categories in the Mercury programming language". Archived fromthe original on 2012-07-03. Retrieved2013-02-23.
  9. ^"Mercury predicate modes". Archived fromthe original on 2012-07-03. Retrieved2013-02-25.
  10. ^"Representing failure using the Maybe monad".
  11. ^"The class MonadPlus".
Retrieved from "https://en.wikipedia.org/w/index.php?title=Deterministic_algorithm&oldid=1293713463"
Category:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp