小编UmN*_*obe的帖子

Java hashmap真的是O(1)吗?

我已经看到了一些关于SO re Java hashmaps及其O(1)查找时间的有趣声明.有人可以解释为什么会这样吗?除非这些哈希图与我买的任何哈希算法有很大的不同,否则必须始终存在包含冲突的数据集.

在这种情况下,查找将是O(n)而不是O(1).

有人可以解释他们是否 O(1),如果是,他们如何实现这一目标?

java big-o hashmap time-complexity

153
推荐指数
6
解决办法
11万
查看次数

在编译Eclipse期间跳过一些文件

在Eclipse下编译时有没有办法跳过一些Java文件?

java eclipse

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

使用notepad ++执行命令

如何使用Notepad ++中的"运行"命令指定要处理的实际文件.我想要例如使用actualfile作为输入运行pdflatex,或者使用cs编译器等.使用整个路径是不实际的,它必须适用于任何实际文件.

command notepad++

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

当目录存在时,mkdir -p失败

mkdir -p $directory当目录存在时,我们的一个远程系统失败.这意味着它显示

mkdir:无法创建目录'$ directory':文件存在

这真是令人费解,因为我相信-p当目录已经存在时,合同总是成功.它适用于我尝试过的其他系统.

test在所有这些系统上都有一个用户,并且directory=/home/test/tmp.

linux shell mkdir

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

'instanceof'的例子

public class TableModel2 extends TableModel1 { ... }

TableModel2 tableModel = new TableModel2();

boolean t1 = tableModel instanceof TableModel1;
boolean t2 = tableModel instanceof TableModel2;
Run Code Online (Sandbox Code Playgroud)

在上述例子中,t1t2true.那么,我如何区分TableModel1TableModel2使用instanceof

java instanceof

20
推荐指数
4
解决办法
7万
查看次数

命令在终端中工作,但不是通过QProcess

ifconfig | grep 'inet'
Run Code Online (Sandbox Code Playgroud)

通过终端执行时正在工作.但不是通过QProcess

我的示例代码是

QProcess p1;
p1.start("ifconfig | grep 'inet'");
p1.waitForFinished();
QString output(p1.readAllStandardOutput());
textEdit->setText(output);
Run Code Online (Sandbox Code Playgroud)

textedit上没有显示任何内容.

但是当我ifconfig在qprocess开始使用时,输出会显示在textedit上.我错过任何计谋构建命令ifconfig | grep 'inet',如使用\''\||?特殊字符?但我也试过了:(

c++ linux terminal qt pipe

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

矩阵的就地转置

是否可以(m,n)就地转置矩阵,并将矩阵表示为单个数组m*n

通常的算法

transpose(Matrix mat,int rows, int cols ){
    //construction step
    Matrix tmat;
    for(int i=0;i<rows;i++){
      for(int j=0;j<cols;j++){
       tmat[j][i] = mat[i][j];
      }
    }
 }
Run Code Online (Sandbox Code Playgroud)

除非矩阵是方阵,否则不适用于单个数组.如果没有,所需的最小额外内存量是多少?

编辑:我已经尝试了各种口味的

for(int i=0;i<n;++i) {
  for(int j=0;j<i;++j) {
     var swap = m[i][j];
     m[i][j] = m[j][i];
     m[j][i] = swap;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是不正确的.在这个具体的例子中,m甚至不存在.在单行矩阵中mat[i][j] = mat[i*m + j],其中trans[j][i] = trans[i*n + j]

algorithm matrix

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

C++随机迭代向量

我正在研究一个多线程程序,其中所有线程共享一些向量(只读).每个线程的目标是遍历整个向量.尽管如此,所有线程都必须以不同的方式访问此向量.

由于向量是const并且在所有线程之间共享,我不能使用random_shuffle并且只是迭代它.现在我的解决方案是构建一个crossref向量,它将在共享向量上包含索引,然后对该向量进行混洗,即

     std::vector<int> crossref(SIZE) ; // SIZE is the size of the shared vector
     std::iota (std::begin(crossref), std::end(crossref), 0); // Fill with indices ref 
     std::mt19937 g(SEED); // each thread has it own seed.
     std::shuffle (crossref_.begin(), crossref_.end(), g); // Shuffle it 
Run Code Online (Sandbox Code Playgroud)

尽管如此,这样做会揭示一些问题(1)它不是非常有效,因为每个线程在访问共享向量之前需要访问它的crossref向量,(2)由于所需的内存量,我有一些性能问题:共享向量是非常大,我有很多线程和处理器.

有没有人有一些改进的想法,将避免额外的内存需求?

c++ algorithm multithreading vector random-access

17
推荐指数
2
解决办法
1198
查看次数

为什么不删除我的指针删除我的指针?

因此,为了更好地理解新/删除(真的用小例子向我自己证明为什么接口需要虚拟析构函数),我想了解内存泄漏,以便我可能生活在对它们的恐惧中.但是我很难接触到泄漏,可以这么说; 实际上,我也很难用new/delete.

这是我最简单的版本:

int* P1 = new int(43);

cout<<"P1 = "<<P1<<endl;
cout<<"*P1 = "<<*P1<<endl;

delete P1;

cout<<"P1 = "<<P1<<endl;
cout<<"*P1 = "<<*P1<<endl;
Run Code Online (Sandbox Code Playgroud)

这打印:

P1 = 0xcc0340
*P1 = 43
P1 = 0xcc0340
*P1 = 43
Run Code Online (Sandbox Code Playgroud)

我在课堂上有一些更复杂的东西,但是这个例子说明了我的失败.我认为删除需要一个指针并释放它的内存,从而使指针无效或至少它指向什么?我必须做一些非常简单的事情.

c++ memory-leaks undefined-behavior

15
推荐指数
3
解决办法
1128
查看次数

什么是SAT以及它有什么用?

最近我看到一篇关于使用SAT解决难题的Reddit文章[1].这让我对这个"SAT"的事情非常好奇.我阅读了维基百科的文章,但我想请你们中的某些人以更多的外行术语为我解释.

什么是SAT,它有什么用?它可以用于遍历树结构吗?用于解析文本?换线[2]?对于垃圾箱包装[3]?这是一种优化技术吗?

在相关的说明中,我读到NP与P是关于选择哪个数字的集合为零而不是检查某些数字是否总和为零 - SAT是否与此相关?

[1] http://www.reddit.com/r/programming/comments/pxpzd/solving_hexiom_really_fast_with_a_sat_solver/

[2] http://en.wikipedia.org/wiki/Line_wrap

[3] http://en.wikipedia.org/wiki/Bin_packing_problem

theory algorithm solver

14
推荐指数
2
解决办法
7626
查看次数