#include<stdio.h>
#include<math.h>
void printboard(int n);
void fourQueen(int k,int n);
int place(int k,int i);
int x[100];
void NQueen(int k,int n)
{
int i;
for(i=1;i<=n;i++)
{
if(place(k,i)==1)
{ x[k]=i;
if(k==n)
{
printf("Solution\n");
printboard(n);
}
else
NQueen(k+1,n);
}
}
}
int place(int k,int i)
{
int j;
for(j=1;j<k;j++)
{
if((x[j]==i)||abs(x[j]-i)==abs(j-k))
return 0;
}
return 1;
}
void printboard(int n)
{
int i;
for(i=1;i<=n;i++)
printf("%d ",x[i]);
}
void main()
{
int n;
printf("Enter Value of N:");
scanf("%d",&n);
NQueen(1,n);
}
Run Code Online (Sandbox Code Playgroud)
我认为它有时间复杂度:O(n ^ n),因为NQueen函数是递归调用的,但是这个程序可能有更严格的约束吗?那么最好的情况,最坏的情况时间复杂性.我也对place()函数感到困惑,它是O(k)并从NQueen()调用.
为什么声明:
算法A的运行时间至少为O(n²)
没意义?
插入排序算法的运行时间最多为O(n²)
这是对的吗?
我尝试了网但无法得到很好的解释.
我有另一个问题:
我知道任何线性函数a⋅n+ b都是O(n),也是O(n²).它也是O(n³)吗?
我有两本数据结构书.在两本书中,有两种不同的B树插入方法:
假设我想将值k插入B树.在搜索适当的叶节点以插入值k之后,计算特定叶节点中存在的值.如果叶节点已满,则:
1.从叶子元素和新元素中选择单个中值.之后将节点分成两个节点.中间值转移到父节点.
2.在m/2-1(m为树的顺序)position.median值转移到父节点后,将节点分成两个节点.之后将值插入到适当的位置.
以下哪种方法是正确的?
另一个问题:
对于订单n的B树,节点必须包含的最小密钥数是多少?我已经搜索了互联网和书籍,但无法得到确切的等式,我可以找到最小的密钥数:e,g if order = 5然后任何节点(root除外)的最小键数为2.这是怎么回事?
任何答案将不胜感激!