字典查找(O(1))与Linq,其中
什么更快?我应该牺牲Linq标准来实现速度(假设字典查找确实更快)?因此,让我详细说明: 我有以下资料:字典查找(O(1))与Linq,其中,linq,dictionary,complexity-theory,time-complexity,Linq,Dictionary,Complexity Theory,Time Complexity,什么更快?我应该牺牲Linq标准来实现速度(假设字典查找确实更快)?因此,让我详细说明: 我有以下资料: List<Product> products = GetProductList(); 或者,使用Linq: Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault(); Dict方法的缺点当然是,这需要更多的内存空间、更多的代码编写、更少的优雅等等(尽管这其中的大部分是有争
List<Product> products = GetProductList();
或者,使用Linq:
Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();
Dict方法的缺点当然是,这需要更多的内存空间、更多的代码编写、更少的优雅等等(尽管这其中的大部分是有争议的)。假设这不是一个因素。我应该采取第一种方法吗
最后,我想确认上述Linq方法的复杂性是否确实是O(n),我不认为它能比这更好 假设您从对象枚举开始,并且只执行一次 执行
Where
方法会比添加到字典
然后再进行查找更快。原因是dictionary方法不是O(1)。在这个场景中,您将向字典中添加项,然后进行查找。添加部分是O(N),它与Where
方法一样昂贵,并且有额外的内存开销
另一个需要注意的小问题是,
字典
并不是真正的O(1)。相反,它接近O(1),但在某些情况下(例如,大量冲突键)性能会降低是啊,我忘了考虑增加字典的开销了。谢谢。但是如果我用这本字典很多次(即100次),而不是一次呢?
string some_serial = ...;
try { Product p = dict[some_serial]; } catch(KeyNotFoundException) { }
Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();