그래프 클래스에서 정수 값 (주로 1 ~ 1000)을 가진 노드를 처리해야합니다. 모든 단계에서 그래프에서 노드와 모든 이웃을 제거하려고합니다. 또한 나는 항상 최소값의 노드로 시작하고 싶다. 나는 가장 빠른 방법으로이 작업을 수행하는 방법에 대해 오랫동안 생각하고 다음을 수행하기로 결정 adjancency 목록을 사용하여 저장됩니다빠른 버킷 구현
- 그래프
- 값 하여 노드를 저장하는 거대한 배열
- 가장 낮은 비어 있지 않은 버킷의 인덱스는 항상 통이 비어 증가는 이미 인덱스
- 경우 내가 그 인덱스의 임의의 요소를 선택하여 매우 빠른 최소 값의 노드를 찾거나 할 수 저장
- 오프 트랙을 유지 선택한 노드 제거하기 버킷은 분명히 O (1)에서 수행 할 수 있지만 문제는 이웃 노드를 제거하기 위해 모든 이웃 노드에 대해 버킷 버킷 [이웃 노드의 값]을 검색해야한다는 것인데, 이는 실제로 빠르지 않습니다.
std::vector<Node*> bucket[1000]
이있다
더 효율적인 방법이 있습니까?
나는 std::list<Node*> bucket[1000]
과 같은 것을 사용하고 모든 노드에 O (1)의 목록에서 노드를 제거 할 수 있도록 "list element"에 대한 포인터를 할당 할 것을 고려했습니다. 이것은 stl리스트에서 가능합니까? 분명히 손으로 구현할 수있는 정상적인 이중 링크리스트로 할 수 있습니까?
일반 C 배열에 STL 컨테이너가있는 것이 이상하게 느껴집니다. 그리고 네,이 발언은 화제가 아닙니다. –
vector와 list로부터 원소를 제거하는 상대 속도는'k * O (n)'과'K * O (1)'입니다. 'n','k','K'의 값 또한 중요합니다. 'n'이 평균적으로 '작다'면 벡터가 매우 빨라질 수 있습니다. –
출력은 무엇입니까? 근사 최소 체중 지배 세트? –