一个关于线性表的问题

wxtp 2003-10-12 08:36:13
在无序数组尾部添加一个数据所用时间为常数,但其查找一个与关键码匹配的元素的时间复杂度为O(n)
而有序数组中可使用二分法使时间复杂度降为O(logn),但由于整数移动,若要保持数据的有序,插入一个元素所需时间复杂度为O(n),
怎样组织数据可使插入和查找的时间复杂度都O(logn)?
不必写出详细程序,只要简述相关算法。
...全文
48 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxtp 2003-10-13
  • 打赏
  • 举报
回复
To Andy84920:
能不能给出查找的算法描述?
还有假设链表序列是以下结构: head->1->2->3->5->8->9->12
如果查找时,设中间节点指向5,要查找8的话,第二次缩小范围时中间节点是不是还要再移动?
Andy84920 2003-10-13
  • 打赏
  • 举报
回复
TO:wxtp()
是啊,这样就转到中间结点与最后结点之间的查找,然后再移动中间结点,这样
能让效率更高吧,我想!
owenowen 2003-10-13
  • 打赏
  • 举报
回复
to wxtp():
你说的算法类似于一个二元搜索树
但你的算法还是O(n)级的,而且你可以定义
typedef struct element_T{
int data;
struct element_T *next;
struct element_T *last;
}
就是一个双向链表
定义一个二元搜索树可以使插入(删除),查找都达到O(log(n))级

wxtp 2003-10-13
  • 打赏
  • 举报
回复
有谁能把算法简单的写一下
coolduckplus 2003-10-12
  • 打赏
  • 举报
回复
Andy84920的想法是什么意思?
能不能具体点?
我是菜鸟,谢谢
ford_hjq 2003-10-12
  • 打赏
  • 举报
回复
小型的话,还是链表好
Andy84920 2003-10-12
  • 打赏
  • 举报
回复
我没学过数据结构,算法什么东西,也没看过这之类的书.
所以可能只是我随便想想说出来的.希望哪位高手来发表见解,
等着看,希望对我的想法给个评价,谢谢!
Andy84920 2003-10-12
  • 打赏
  • 举报
回复
我的想法:
用一个双向链表,在链表的定义时多用一个结点指针,使得它指向链表的中间结点.
为了二分查找用.这样就不必从头遍历来比较.

同时这样为插入元素提供了效率,不必移动元素.

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧