這里將講解一下npc問題中set cover和vertex cover分別是什么。
set cover:
問題定義:
實例:現在有一個集合A,其中包含了m個元素(注意,集合是無序的,並且包含的元素也是不相同的),現在n個集合,分別為B1、B2、...、Bn。並且這n個集合的並集恰好等於A集合,即:B1UB2UB3U...UBn=A。
問題:是否存在B集合的最小子集,且他們的並集也等於A集合?
例子:集合A={1,2,3,4,5},集合B={{1,2,3},{2,4},{3,4},{4,5}}。可以看出,B集合的並集恰好等於A集合,那么問題的解是:SETCOVER={{1,2,3},{4,5}}。
vertex cover:
問題定義:
實例:圖G=(V,E)。
問題:是否存在V的子集V',使得|V'|<=|V|,並且G中的每條邊e,至少有一個頂點在V'中?
這個問題有一個npo(np optimization problem)的變種,即:找到滿足條件的最小頂點集,也就是使得滿足條件下最小|V'|值。
首先可以看出,這是兩類完全不同的問題,set cover屬於集合一類問題,應用於計算機科學以及計算理論方面。vertex cover,屬於圖論一類問題,應用於計算機科學、計算理論、圖論、數學等等方面。