我正在尝试实施A *而我遇到了一个问题。我有一个集合,我需要找到给定函数的最小值,但我还需要能够检查给定单元格是否在该集合中。为了有效地执行此操作,我需要按位置和值对集进行排序。编写这样的数据结构似乎并不太难。我只需要一个按位置排序,一个按值排序,并且每个都指向另一个。这有两个问题。首先,为了做得好,结构需要能够引用彼此的部分。如果我可以指向特定元素,那么在日志时间搜索树是没有意义的。为了做到这一点,我几乎需要从头开始重写树。其次,它似乎不是我应该写的那种东西。数据结构应该是库的一部分。我需要的数据结构的名称是什么,我在哪里可以找到它的C#库?
答案 0 :(得分:2)
根本不需要两个数据结构进行交互。只有两个数据结构并排。确保在添加/删除项目时添加/删除项目。然后,您可以根据您感兴趣的属性获取任一集合的最小值。
创建新数据结构的唯一真正原因是确保在两个集合之间保持同步添加/删除项目。没有必要明确地操纵实际的树。
这样的自定义类型看起来像这样(省略了其他操作;它们都只委托给first
和/或second
)。
public class SetPair<T>
{
private SortedSet<T> first;
private SortedSet<T> second;
public SetPair(IComparer<T> firstComparer, IComparer<T> secondComparer)
{
first = new SortedSet<T>(firstComparer ?? Comparer<T>.Default);
second = new SortedSet<T>(secondComparer ?? Comparer<T>.Default);
}
public T FirstMin { get { return first.Min; } }
public T SecondMin { get { return second.Min; } }
public bool Add(T item)
{
return first.Add(item) &&
second.Add(item);
}
public bool Remove(T item)
{
return first.Remove(item) &&
second.Remove(item);
}
}