我遇到了一个分段实施的Eratosthenes筛子,它的运行速度比传统版本高出许多倍.有人可以解释一下细分如何改善运行时间?请注意,我想在[1,b]中找到素数.
它适用于这个想法:(寻找素数到10 ^ 9)
我们首先生成低于sqrt(10 ^ 9)的筛分质数,这是交叉倍数所需的.然后我们开始交叉第一个素数2的倍数,直到我们达到2> = segment_size的倍数,如果发生这种情况,我们使用(multiple-segment_size)计算下一个段中该倍数的索引并将其存储在一个单独的数组(下一个[]).然后我们使用相同的程序交叉下一个筛分素数的倍数.一旦我们在第一段中划掉所有筛分质数的倍数,我们就在筛子阵列上迭代并打印出(或计数)质数.
为了筛选下一个段,我们重置了筛子阵列,并通过segment_size增加了较低的偏移量.然后我们再次开始交叉倍数,对于每个筛分素数,我们从下一个数组中检索筛分指数,然后我们从那里开始交叉倍数...
有人可以解释这个从后缀数组构建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) 我正在使用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中的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)
代码工作正常.任何人都可以解释为什么第一种方法不起作用?
有一个数组A,定义为int A[10],并且有另一个包含基址的指针,定义为int *ptr = A.
我最近看过这篇文章 如何找到'sizeof'(一个指向数组的指针)?,我无法弄清楚A和ptr之间的区别是什么.他们俩都不只是拥有阵列的基地址吗?
我们A[i] and ptr[i]现在可以互换使用,对于一些小于10的整数.
那么为什么使用sizeof()得到的结果有所不同?
我必须在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问题的解决方案,而不是第一个.