小编wee*_*eeb的帖子

为什么Dijkstra的算法使用减少键?

Dijkstra的算法教给我如下

while pqueue is not empty:
    distance, node = pqueue.delete_min()
    if node has been visited:
        continue
    else:
        mark node as visited
    if node == target:
        break
    for each neighbor of node:
         pqueue.insert(distance + distance_to_neighbor, neighbor)
Run Code Online (Sandbox Code Playgroud)

但是我一直在阅读关于算法的一些阅读,我看到的很多版本都使用了reduce-key而不是insert.

为什么会这样,这两种方法之间有什么区别?

algorithm dijkstra priority-queue graph-algorithm data-structures

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

最小连续子序列和最小长度L

因此对于以下数组,其中L = 3

-5 -1 2 -3 0 -3 3
Run Code Online (Sandbox Code Playgroud)

至少长度为3的最佳总和将为0,其中子序列是最后三个元素(0,-3,3)

如何以比O(NL)更快的速度计算任何数组的总和(如果L == 0)时间,实际上是O(N ^ 2)?

arrays algorithm dynamic-programming

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

数组中最常见的元素/在O(n)时间和O(1)空间中确定性地找到相对多数?

例如,数组的答案:

1,11,3,95,23,8,1

将为1,因为所有其他元素仅出现一次,而1出现两次.

很多类似于我在stackoverflow上看到的这个问题的问题要求找到绝对多数(答案在长度为n的数组中至少发生n/2),或者使用排序或哈希表回答问题.前者不是我要求的,后者要么太慢(O(n log n)用于排序)或者使用太多内存(O(n)用于哈希表).

这样的算法存在吗?如果没有,是否有证据显示为什么不可能?包括一个来源会很好.

algorithm data-structures

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

Python:在多维数组/列表上使用没有 lambda 的 map()

我在 python 中有一些代码,它按位或等于 b 到一个称为 a 的多维列表中的所有值

for i in xrange(len(a)):
    for j in xrange(len(a[i])):
        a[i][j] |= b
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有什么方法可以只使用 (map()、filter()、reduce()) 编写此代码,而不必使用 lambdas 或任何其他函数定义,如下例所示

map(lambda x: map(lambda y: y | b, x), a)
Run Code Online (Sandbox Code Playgroud)

python lambda functional-programming

4
推荐指数
1
解决办法
6134
查看次数

为什么我的 UniquePtr 实现会双重释放?

当我运行这个程序时,我为 unique ptr 的实现获得了双重释放。知道为什么会发生这种情况吗?

#include <iostream>
#include <memory>
using namespace std;

template <class T>
class UniquePtr
{
public:
        UniquePtr(T* t = nullptr) : t_(t) {}
        UniquePtr(const UniquePtr&) = delete;
        UniquePtr& operator=(const UniquePtr& oth) = delete;
        UniquePtr(UniquePtr&& oth) {
                std::swap(t_, oth.t_);
        }
        UniquePtr& operator=(UniquePtr&& oth) {
                std::swap(t_, oth.t_);
                return *this;
        };
        ~UniquePtr() {
                delete t_;
        }

private:
        T* t_;
};

struct Obj {
        Obj(int x): x_(x) { cout << "new " << x_ << endl; }
        ~Obj() { cout << "delete …
Run Code Online (Sandbox Code Playgroud)

c++ memory

2
推荐指数
1
解决办法
120
查看次数

Django重复模型定义/字段

这是我正在使用的:

class a(models.Model):
    x = models.CharField()

class b(a):
    pass
Run Code Online (Sandbox Code Playgroud)

这个问题是当创建一个b的实例时,也会创建一个a的实例,我猜这是因为b继承了Django分配的一些属性,比如数据库表.我希望b拥有所有的字段和方法,以便不会发生这种重复.如何才能做到这一点并不简单地复制和粘贴从所有代码B或使用一个抽象基类C和有A和B都从C继承(我想只有两个型号/班)?你必须使用元类吗?

python django model-view-controller metaclass

1
推荐指数
1
解决办法
811
查看次数