많은 노드 (수백만 개 이상)가 있고 메모리에로드해야하는 트리가 있습니다. 따라서 노드와 노드의 관계를 메모리에 저장하는 가장 효율적인 방법이 필요합니다. 가장 적합한 데이터 구조는 무엇입니까? 내가 삭제 및 삽입, 브라우징 등이 나무에 같은 작업을 수행 할 필요가,최적의 트리 데이터 구조
//more obvious but the less efficient
class TreeNode
{
Node parent;
TreeNode[] children;
//additional fields
byte X;
byte Y;
byte marker;
string comment;
}
//more efficient
class TreeNode
{
TreeNode next; //reference to the next child of parent node,
//if isLast=true - reference to parent node
TreeNode firstChild; //reference to the first child of this node
bool isLast; //true, if this node is the last parents child
//additional fields
byte X;
byte Y;
byte marker;
string comment;
}
주, 나는이 충분히 빨리해야합니다 지금까지, 나는 두 가지 옵션이 있습니다.
편집 :이 경우에 가장 적합한 RAM은 전체 트리를 저장하는 데 사용됩니다. 두 번째 기준은 빠른 삭제, 찾아보기 및 삽입 작업입니다. 위에서 쓴 데이터 구조에서는 시간이 많이 걸릴 수 없습니다. 나는이 기준을 더 엄격하게 공식화 할 수 없다.
이 용도로 F #을 사용하는 것이 좋습니다. –
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –
표준 트리 알고리즘이 작동하지만, 노드를 단일 List <>로 구조화하고 참조가 아닌 인덱스를 사용하여 참조하는 경우 GC에서 훨씬 더 쉽습니다. –