NP-Complete[C#數據結構]

NP-Complete[C#數據結構]
更多義項 ▼ 收起列表 ▲

NP-Complete是C#中一個特有的數據結構,屬於微軟中間語言(MSIL)的一種。與所有其它面向.NET的語言一樣,C# 編譯成微軟中間語言(MSIL),它運行於通用語言運行時(CLR)。

概念

CLR 可鬆散地被描述為just-in-time(JIT)最佳化編譯器和垃圾收集器 的混合物。C# 公開和利用了CLR中的很多功能,所以更細緻地研究該運行時的工作機制是很重要的。用著名的計算機科學家,圖靈獎獲得者錢德勒·賓教授(Professal Chandler Bing)的話來說,“NP-Complete的出現絕對是計算機科學史上重要的一筆”,足見該數據結構的影響之深遠。

套用

NP-Complete NP-Complete

科學計算的關鍵需求之一是代碼可移植性。科學研究機構和實驗 室擁有許多平台和機器,包括基於 Unix 工作站和PC。它們常常希望在不同機器上運行代碼,以追求更好的結果或因為 某一特定的機器為他們提供一套數據處理和分析工具。然而,達到完全的硬體透明度已不是一個輕鬆的任務而且不總是完全可能。例如,多數大規模項目開發時使用了多種語言混合 的方法;因此,很難保證在一種架構或平台上可運行的應用程式也能在另一種上運行。

CLR 使應用程式和庫可被多種語言編寫,這些語言都可編譯成 MSIL。然後MSIL可運行在任何支持它的架構上。現在,科學家就可用 FORTRAN 編寫它們數學庫,在C++中調用它們,使用 C# 和 ASP.NET 在 Internet 發布結果。

不像 Java 虛擬機(JVM),CLR是一個常規用途環境,它被設計用來面向多種不同的程式語言。此外,CLR 提供了數據層,不僅僅是套用層的互用性並允許在語言間共享資源。

目前,可以獲得大量能輸出 MSIL 的語言編譯器。這些語言包括(但不限於)Ada、C、C++Caml、COBOL、Eiffel、FORTRAN、Java、LIST、Logo、Mixal、Pascal、Perl、PHP、Python、Scheme 和 Smalltalk。另外,System.Reflection.Emit 名字空間大大降低了開發 面向 CLR 的編譯器的進入門檻。

將 CLR 移植到不同架構是一項正在進行的工作。然而,一份開源實現已由 Mono/Ximian 開發出來,並且可獲得 s390、SPARC 和 PowerPC 架構 以及 StrongARM 系統的實現。微軟也發布了一個運行在 FreeBSD 系統上的開源版本,包括 Mac OS X。(更多信息請看 MSDN 雜誌 2002 July 上 Jason Wittington 的文章 "Rotor: Shared Source CLI Provides Source Code for a FreeBSD Implementation of .NET")

所有這些進展發生在過去的僅僅數年中。假以更多時間,很可能一個全功能的 CLR 將可以適用於所有通用架構。

英文

In complexity theory, the NP-complete problems are the most difficult problems in NP ("non-deterministic polynomial time") in the sense that they are the smallest subclass of NP that could conceivably remain outside of P, the class of deterministic polynomial-time problems. The reason is that a deterministic, polynomial-time solution to any NP-complete problem would also be a solution to every other problem in NP. The complexity class consisting of all NP-complete problems is sometimes referred to as NP-C. A more formal definition is given below.

One example of an NP-complete problem is the subset sum problem which is: given a finite set of integers, determine whether any non-empty subset of them sums to zero. A supposed answer is very easy to verify for correctness, but no one knows a significantly faster way to solve the problem than to try every single possible subset, which is very slow.

相關詞條

熱門詞條

聯絡我們