gpt4 book ai didi

c - 在最坏的情况下,在排序的链表中搜索一个元素需要进行多少次比较?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:01 25 4
gpt4 key购买 nike

这是我大学数据结构和算法类(class)测验中的一道题

What is the number of comparisons required to search an element in a sorted linked list in the worst case?

这些是选项:

a. ceil (n/2)

b. ceil (log n)

c. n2

d. ceil ((log n) + 1)

e. n

根据答案正确答案是n。

但我是这样想的,在一个排序的链表中,搜索不需要遍历所有元素。它可以从当前节点跳转到第二个节点(如 curr->next->next 并保留前一个指针,如 prev = curr->next)并查看是否节点的key小于要搜索的key,

如果要搜索的键大于当前节点的键,我们重复这个。

否则,我们将搜索键与 prev->key 进行比较,如果它们相等,则找到该元素,否则该元素不存在于链表中

此方法将花费大约 (n/2) 次比较(如果与之前的比较则为 + 1)...所以答案应该是 ceil(n/2) 对吧?我说得对吗?

编辑:这是我上面提到的算法的c版本(链表的头部和要搜索的键是参数。skey是要搜索的键)

void search (struct node * head, int skey)
{
struct node * curr = head,*prev = NULL;


while(1)
{
if(curr==NULL)
{
if(prev!=NULL)
{
if(prev->key== skey)
{
printf("FOUND");
break;
}
else
{
printf("NOT FOUND");
break;
}
}
else
{
printf("NOT FOUND");
break;
}
}
if(curr->key==skey)
{
printf("FOUND");
break;
}
else if (curr->key < skey)
{
if(curr->next!=NULL)
{
prev=curr->next;
curr=curr->next->next;

}
else
{
printf("NOT FOUND");
break;
}
}
else
{
if(prev!=NULL)
{
if(prev->key== skey)
{
printf("FOUND");
break;
}
else
{
printf("NOT FOUND");
break;
}
}
else
{
printf("NOT FOUND");
break;
}
}

}
}

最佳答案

这是一种逐步遍历链表的方法,每个节点仅进行 2 次比较。

while( curr = head; curr != NULL && curr->skey != skey; curr = curr->next);

最坏的情况是 skey 不在链表中

关于c - 在最坏的情况下,在排序的链表中搜索一个元素需要进行多少次比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com