小编Chr*_*her的帖子

为什么0/1背包使用动态编程不是多项式时间算法

我有难以理解为什么使用动态编程的0/1背包不是多项式时间可解决的.这里也提出了类似的问题.为什么背包问题是伪多项式?.有人给出了解释,但我仍然不明白为什么我们应该考虑权重输入的二进制表示.怎么样的n,如果用二进制表示法考虑,我可以说它是对项目数量的指数吗?类似地,对于任何其他多项式时间算法,我可以声称它们具有指数时间复杂度,因为每个输入在计算机中以二进制数字表示.我知道我错了.有人可以通过简单易懂的方式指出原因吗?提前致谢.

algorithm big-o time-complexity

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

我应该在命名空间中包含头文件吗?

目前我正在研究ac框架,我想在其中嵌入一个c ++包.但是,发生了很多命名冲突.所以我决定在C++源代码中添加一个命名空间.现在的问题是我应该在namespace {}块中移动#include"header.h"吗?我只花了一些时间来弄清楚由以下代码产生的错误.

原始C++源码

在啊

#include <unistd.h>
struct File 
{
     void func(int fd);
}; 
Run Code Online (Sandbox Code Playgroud)

在a.cpp

#include "a.h"
void File::func(int fd)
{
    ::close( fd );
}
Run Code Online (Sandbox Code Playgroud)

我添加了这样的命名空间

新啊

namespace MyAddedNameSpace 
{ 
    #include <unistd.h>
    struct File 
    {
        void func(int fd);
    }; 
}
Run Code Online (Sandbox Code Playgroud)

新的a.cpp

#include "a.h"
namespace MyAddedNameSpace 
{
    void File::func(int fd)
    {
        ::close( fd );
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:: close()尚未声明.

我将#include指令放在命名空间块中的原因是因为我导入的c ++包也使用#ifndef标志来包含头文件,如下所示.所以我认为简单的方法是将所有代码放在命名空间块{}中

#ifndef 
    #include <header1.h> 
    #include <header2.h>
    ...
#else 
    #include <header3.h>
    #include <header4.h>
    ...
#endif
Run Code Online (Sandbox Code Playgroud)

现在我通过在cpp文件中添加额外的行来解决这个问题

#include <unistd.h>  //new added line 
#include "a.h" …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces

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

标签 统计

algorithm ×1

big-o ×1

c++ ×1

namespaces ×1

time-complexity ×1