小编Dhr*_*ick的帖子

分割如何改善Eratosthenes筛选的运行时间?

我遇到了一个分段实施的Eratosthenes筛子,它的运行速度比传统版本高出许多倍.有人可以解释一下细分如何改善运行时间?请注意,我想在[1,b]中找到素数.

它适用于这个想法:(寻找素数到10 ^ 9)

  • 我们首先生成低于sqrt(10 ^ 9)的筛分质数,这是交叉倍数所需的.然后我们开始交叉第一个素数2的倍数,直到我们达到2> = segment_size的倍数,如果发生这种情况,我们使用(multiple-segment_size)计算下一个段中该倍数的索引并将其存储在一个单独的数组(下一个[]).然后我们使用相同的程序交叉下一个筛分素数的倍数.一旦我们在第一段中划掉所有筛分质数的倍数,我们就在筛子阵列上迭代并打印出(或计数)质数.

  • 为了筛选下一个段,我们重置了筛子阵列,并通过segment_size增加了较低的偏移量.然后我们再次开始交叉倍数,对于每个筛分素数,我们从下一个数组中检索筛分指数,然后我们从那里开始交叉倍数...

c c++ algorithm primes sieve-of-eratosthenes

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

从后缀数组获取LCP的代码如何工作?

有人可以解释这个从后缀数组构建LCP的代码是如何工作的吗?suffixArr[]是一个数组,用于suffixArr[i]保存带有等级i的后缀的字符串中的索引值.

 void LCPconstruct()
{
    int i,C[1001],l;
    C[suffixArr[0]] = n;


    for(i=1;i<n;i++)
    C[suffixArr[i]] = suffixArr[i-1];

    l = 0;

   for(i=0;i<n;i++)
   {
    if(C[i]==n)
        LCPadj[i] = 0;
    else
    {
        while(i+l<n && C[i]+l<n && s[i+l] == s[C[i]+l])
            l++;
        LCPadj[i] = l;

        l = max(l-1,0);
    }
  }

  for(i=0;i<n;i++)
     cout<<LCPadj[suffixArr[i]]<<"\n";


}
Run Code Online (Sandbox Code Playgroud)

c++ algorithm suffix-array

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

如何在Tkinter中使用相同的对话框来浏览和选择文件和目录?

我正在使用Tkinter为python脚本构建GUI.我需要一个按钮,打开一个对话框,允许我选择文件和目录.直到现在,我才遇到过

tkFileDialog.askdirectory(parent=root, title=dirtext1)
Run Code Online (Sandbox Code Playgroud)

只允许在对话框中选择目录,

tkFileDialog.askopenfilename(parent=root, title=filetext)
Run Code Online (Sandbox Code Playgroud)

这允许我只选择文件.截至目前,我使用单独的按钮访问这些对话框,每个按钮调用其中一个功能.无论如何使用单个对话框选择文件或文件夹?

python tkinter

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

简单的Python代码中的NZEC错误

这类似于Python中的NZEC错误问题已经得到解答.但是,批准的答案对我不起作用.

我尝试使用以下代码在Codechef(http://goo.gl/cHYm4W)上解决问题:

x, y = raw_input().split(" ")
x = int(x)
y = float(y)

if x%5 == 0 and y-x-0.5 >= 0:
    y = y-x-0.5

print "%0.2f" % y
Run Code Online (Sandbox Code Playgroud)

这给了我一个NZEC错误.但如果我改变它

user_input = raw_input().split()
x = int(user_input[0])
y = float(user_input[1])

if x%5 == 0 and y-x-0.5 >= 0:
    y = y-x-0.5

print "%0.2f" % y
Run Code Online (Sandbox Code Playgroud)

代码工作正常.任何人都可以解释为什么第一种方法不起作用?

python

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

数组名称和指向第一个元素的另一个指针有什么区别?

有一个数组A,定义为int A[10],并且有另一个包含基址的指针,定义为int *ptr = A.

我最近看过这篇文章 如何找到'sizeof'(一个指向数组的指针)?,我无法弄清楚A和ptr之间的区别是什么.他们俩都不只是拥有阵列的基地址吗?

我们A[i] and ptr[i]现在可以互换使用,对于一些小于10的整数.

那么为什么使用sizeof()得到的结果有所不同?

c++ arrays pointers

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

在C++中使用STL的比较函数中的"<="符号而不是"<"符号有什么区别?

我必须在sort()函数中实现第三个参数cmp,以便按降序排序整数数组 .

问题是这个定义不能正常工作,

bool cmp (int a, int b)
{
    if(a<b)
        return false;
    else
        return true;
}
Run Code Online (Sandbox Code Playgroud)

但是,这样做

bool cmp (int a, int b)
{
    if(a<=b)
        return false;
    else
        return true;
}
Run Code Online (Sandbox Code Playgroud)

在main()函数中,我使用

sort(Arr,Arr+n,cmp);
Run Code Online (Sandbox Code Playgroud)

请注意,我声称第一个代码无法正常工作,因为当我使用第二个时,我接受了Codechef问题的解决方案,而不是第一个.

c++ stl

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