2013-05-24 4 views
2

BFS를 사용하여 그래프 색상을 구현할 수 있다고 생각하면 아래에 설명 된 접근 방법을 생각해 냈습니다.BFS를 사용한 그래프 채색 - 탐욕스러운 채색?

그래도 탐욕스러운 알고리즘처럼 보일 지 모르지만 그게 맞는지 나는 잘 모르겠다. 어떤 전문가의 의견?

colors[MAX_COLORS]; 
colorsUsedSoFar[] = NIL; 
like BFS, color first node u with colors[0] i.e color[u] = colors[0]; 
colorsUsedSoFar[] += colors[0]; 

for each node v adjacent to u{ 
    (if v not already colored){ 
    color[v] = color from the colorsUsedSoFar[] but NotUsedByItsAdjacents 
    If all the colors in colorsUsedSoFar[] are used by adjacents, assign a new color to v) 
    } 
} 

'BFS와 마찬가지로'는 대기열을 사용하고 대기열이 소모 될 때까지 처리하는 것이 었습니다.

+0

''그러나 NotUsedByItsAdjacents ''는 분명히 당신이 준수하려고하는 요구 사항이기 때문에 분명히 정확합니다. 최적/최소 색상 사용을 의미하지 않는 한, [위키 피 디아] (http://en.wikipedia.org/wiki/Greedy_coloring)와 동일하지 않습니다. – Dukeling

답변

1

이것은 greedy coloring algorithm의 예입니다.

너비가 큰 첫 번째 검색 (BFS)은 암시 적으로 순서를 선택합니다.

알고리즘은 정확하지만 항상 최적의 색상 (예 : 사용되는 색상 수가 가장 적음)을 제공하지는 않습니다.

더 일반적인 순서는 Welsh–Powell algorithm으로 알려진 정도에 따라 꼭지점을 정렬하는 것입니다.

+0

선택 사항이지만 링크와 함께 Wikipedia의 그림과 설명을 추가했을 것입니다. 사람들은 * 게시물을 자체 포함 (* 필수 * 외부 링크 (유용하지만 확실하지만 필수는 아님))하도록해야합니다. – Dukeling

+1

착색이 최적이 아닐 것이라고 말하는 것은 약간 애매합니다. 일반적으로 모든 최적의 색칠은 해당 색칠을 생성하는 순서 (일반적으로 여러 개)가 있습니다 (첫 번째 링크는 독자에게 알릴 것이지만 Dukeling과 마찬가지로 나는 자체 포함 된 답변을 좋아합니다). –

1

만약 당신이 알고리즘을 BFS 순서로 그래프에 색칠하고 싶다면 for 루프 내부에 색을 칠한 후에 노드를 큐에 추가하지 않았다는 것을 제외하고는 알고리즘이 완벽하게 괜찮다고 생각합니다. 그리고 그것은 또한 욕심 많은 접근법의 한 종류입니다. 당신은 탐욕스럽게 레벨에 따라 첫 번째 노드를 선택합니다. 욕심이 많지는 않지만 좀 그렇습니다.

+0

인물을 보내 주셔서 감사합니다. 그건 좋은 검증되었습니다 :) – pranay