小编אית*_*לוי的帖子

Fibonacci修改:如何修复此算法?

我面前有这个问题,我无法弄清楚如何解决它.它是关于系列的0,1,1,2,5,29,866...(除了前两个之外的每个数字都是前两个数字的平方和(2^2+5^2=29)).在第一部分我不得不写一个算法(不是母语,所以我真的不知道术语)将在系列中获得一个位置并返回它的值(6 returned 29)这是我写它的方式:

public static int mod(int n)
{
    if (n==1)
        return 0;
    if (n==2)
        return 1;
    else
        return (int)(Math.pow(mod(n-1), 2))+(int)(Math.pow(mod(n-2), 2));
}
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要算法将收到一个数字,然后在系列中返回总数.(6- 29+5+2+1+1+0=38)我不知道怎么做,我正在尝试但是到目前为止我真的无法理解递归,即使我写了一些正确的东西,我怎么检查它确定?一般来说,如何达到正确的算法?

禁止使用任何额外参数.

提前致谢!

java algorithm recursion memoization dynamic-programming

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

计算此函数的复杂度

这是功能:

void f(int n)
{
 for(int i=0; i<n; ++i)
   for(int j=0; j<i; ++j)
     for(int k=i*j; k>0; k/=2)
       printf("~");
}
Run Code Online (Sandbox Code Playgroud)

我认为,时间复杂度的计算最终将是这样的:

log((n-1)(n-2))+log((n-1)(n-3))+...+log(n-1)+log((n-2)(n-3))+...+log(n-2)+...log(2)
Run Code Online (Sandbox Code Playgroud)

因此,我得到的时间复杂度为nlog(n!)(因为loga+logb=log(a*b)n-1,n-2,n-3,...总共出现n-1次。

但是,正确的答案是n^2*logn,我不知道我的错误在哪里。这里有人可以帮忙吗?

非常感谢!

c time-complexity

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

无法理解链接列表的定义

我对课堂上定义的链表的定义有一些疑问。

这是使用的:

typedef struct node_t {
int x;
struct node_t *next;
} *Node;
Run Code Online (Sandbox Code Playgroud)

现在,我知道以这种方式我们创建了一种使用指向结点node_t的指针的较短方法。Node将用作struct node_t*

现在,假设我们要创建一个链接列表。例如:

Node node1 = malloc(sizeof(*node1));
Node node2 = malloc(sizeof(*node2));
Node node3 = malloc(sizeof(*node3));
node1->x = 1;
node1->next = node2;
node2->x = 4;
node2->next = node3;
node3->x = 9;
node3->next = NULL;
Run Code Online (Sandbox Code Playgroud)

这大概就是我的想象(圆圈代表结构):

在此处输入图片说明 现在我知道这是错误的,但我不明白为什么。我们有一个指针,node1它指向我们的结构。然后,我们指向node2,它指向另一个结构,依此类推。

另一件事是,我不明白如何在图片中使用更长的箭头。我们不应该只能从圆圈的每个下部指向结构,而不能指向结构的指针吗?这怎么可能?

如果这里有人可以使事情变得更清楚一点,将不胜感激。非常感谢。

c struct pointers linked-list

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