我有一个班级:
public class MyObject {
int id;
int parentId;
MyObject parentObj;
}
我需要用正确的对象填充parentObj。我需要在性能和简洁性方面做到这一点。
所以我有代码:
ICollection<MyObject> Method(ICollection<MyObject> coll)
{
foreach(var item in coll)
...
return coll;
}
我需要用这个集合中的适当对象填充parentObj。我认为这个问题的复杂性是N * log(N)。
答案 0 :(得分:1)
一种经典的方法是使用词典。查找操作(检索给定键的值)可以在 O(1)中实现。这假设一个良好的散列函数,将键映射到查找数组中的位置。
使用.net中的默认Dictionary
实现,这将生成此代码。
ICollection<MyObject> Method(ICollection<MyObject> coll)
{
var lookup = new Dictionary<int, MyObject>();
foreach (var item in coll)
{
lookup.Add(item.id, item);
}
foreach (var item in coll)
{
item.parentObj = lookup[item.parentId];
}
return coll;
}
分配lookup
会产生内存开销,但运行时(理论上) O(n + n)= O(n)