相关疑难解决方法(0)

为什么有人会使用set而不是unordered_set?

C++ 0x正在引入unordered_set,可以在boost许多其他地方使用.我理解的是unordered_set具有O(1)查找复杂性的哈希表.另一方面,set只是具有log(n)查找复杂性的树.为什么人们会使用set而不是unordered_set?即是否需要set了?

c++ algorithm data-structures c++11

134
推荐指数
10
解决办法
6万
查看次数

二进制搜索树优于哈希表的优点

二进制搜索树比哈希表有什么优势?

哈希表可以在Theta(1)时间查找任何元素,并且添加元素也同样容易....但我不确定反过来的优势.

hashtable binary-search-tree data-structures

93
推荐指数
11
解决办法
8万
查看次数

如何为基于最小堆的优先级队列实现O(logn)减少键操作?

我正在开发一个演示Djikstra算法的应用程序,并且要使用它,我需要在我的元素值减少时恢复堆属性.

关于复杂的问题是,当算法改变的元素的值,该元素的索引用于优先级队列中的内部结构(堆在这种情况下)是未知的.因此,我之前需要进行O(n)搜索,以便恢复索引,然后才能对其执行实际的减少键.

而且,我不确定操作所需的实际代码.我在这里使用D-Heap 作为我的优先级队列.伪代码会有所帮助,但我更喜欢Java中的一个例子,说明应该如何做.

algorithm heap priority-queue decrease-key

48
推荐指数
2
解决办法
4万
查看次数

在C++中设置STL的底层数据结构是什么?

我想知道如何在C++中实现一个集合.如果我在不使用STL提供的容器的情况下实现自己的set容器,那么最好的方法是什么呢?

我理解STL集基于二叉搜索树的抽象数据结构.那么底层数据结构是什么?数组?

另外,如何insert()为一组工作?set如何检查元素是否已经存在?

我在维基百科上读到,实现集合的另一种方法是使用哈希表.这怎么样?

c++ set

42
推荐指数
5
解决办法
3万
查看次数

Min-Max堆的Java实现?

你知道它有一个最大-最小堆可靠的Java实现流行的库(Apache的,谷歌等,集合)的,这是一个堆,它允许偷看其最小值和最大值O(1),并在删除一个元素O(log n)

java data-structures minmax-heap

36
推荐指数
5
解决办法
7万
查看次数

Java中的LRU缓存,具有泛型和O(1)操作

这是一个在求职面试中出现的问题.我们的想法是定义一个数据结构,而不是使用Java内置的LinkedHashMap.

LRU高速缓存删除最近最少使用的条目以插入新条目.因此,给出以下场景:

 A - B - C - D - E
Run Code Online (Sandbox Code Playgroud)

如果A是最近最少使用的项目,如果我们要插入F,我们需要删除A.

如果我们通过(键,值)保存带有缓存条目的HashMap以及包含元素的键和使用时间的单独列表,则可以轻松实现这一点.但是,我们需要查询列表以找到最近最少使用的项目,具有潜在的O(n)时间复杂度.

如何在Java中为通用对象和O(1)操作实现此结构?

这与可能的重复不同,因为它侧重于效率(O(1)ops)和实现数据结构本身,而不是扩展Java.

java generics time-complexity data-structures

35
推荐指数
4
解决办法
6万
查看次数

二进制堆和Fibonacci堆的实际应用

Fibonacci堆和二进制堆的真实世界应用是什么?如果你可以在用它来解决问题时分享一些实例,那就太棒了.

编辑:还添加了二进制堆.很想知道.

algorithm binary-heap data-structures fibonacci-heap

32
推荐指数
2
解决办法
2万
查看次数

我应该何时使用make_heap与Priority Queue?

我有一个我想用来创建堆的向量.我不确定是否应该使用C++ make_heap函数或将我的向量放在优先级队列中?在性能方面哪个更好?我何时应该使用一个与另一个?

c++ heap priority-queue

28
推荐指数
3
解决办法
8910
查看次数

如何在Dijkstra算法中使用二进制堆?

我正在编写dijkstra算法的代码,对于我们应该找到与当前正在使用的节点的距离最小的节点的部分,我在那里使用一个数组并完全遍历它以找出节点.

这个部分可以用二进制堆代替,我们可以在O(1)时间内找出节点,但是我们还在更进一步的迭代中更新节点的距离,我将如何合并该堆?

在数组的情况下,我所要做的就是去第(ith -1)索引并更新那个节点的值,但是在二进制堆中不能做同样的事情,我将不得不做完全搜索来计算退出节点的位置,然后更新它.

这个问题的解决方法是什么?

heap dijkstra

28
推荐指数
1
解决办法
3万
查看次数