说实话..我真心没有看懂这个什么意思

lb454048898 2012-02-20 09:17:19
也许理解出了点问题.也许有点急迫..我就是没有看懂它想表达的意思..
上题目 按照算法要求: 进行编程.
1.1基于数组的算法分析
使用一个数组来描述集合,需要把集合中的每个元素映射到数组的具体位置上。下面我们用一个数学公式来确定每个元素的位置。一个简单的映射公式如下:
location(i)=i-1 (2-1)
公式(2-1)指明集合中第i个元素(如果存在的话)位于数组中i-1位置处。为了完整的描述集合,使用变量length作为集合的长度。
在这种数据结构中,搜索一个元素只需根据公式(2-1)进行映射就能实现,其平均时间复杂度是O (1),性能非常理想。
为了在集合中删除第k个元素,需要首先确认集合中包含了第k个元素(如果不存在第k个元素,则引发一个异常),将元素k+1,k+2,…,length依次向前移动一个位置,并将length的值减1,从而删除第k个元素。删除操作的平均时间复杂度为O(length)。
为了在集合中第k个元素后面插入一个新元素,首先要把k+1至length元素往后移动一个位置,然后把新元素插入到k+1位置处。插入操作的平均时间复杂度为O(length)。此外,插入操作是,如果数组已经满了,则会引发一个异常。
采用数组来描述一个集合实现起来非常简单。执行搜索的平均时间复杂度为常数,非常理想。执行删除和插入的时候,有一个和集合的大小呈线性关系的平均时间复杂度,在大部分情况下也是可以接受的。利用数组来描述集合,使用在删除和插入操作少,搜索操作多的场合有非常优异的表现。
但是,这种描述方法有一个非常大的缺点是空间的低効利用。必须要预测集合的最大可能尺寸,根据最大可能尺寸分配数组。考察如下情况,我们需要一个集合,它的最大可能尺寸是5000,但平均尺寸只有100,那么空间的利用率就只有2%。在实际应用中,可能发生的情况会比这更极端。

1.2基于链表的算法分析
在链表描述中,集合中的元素都放在链表的节点中进行描述。链表中的节点不是一个数组元素,因此不能通过公式来映射定位某个元素。取而代之的是,每个节点中都包含了下一个节点的位置信息,链表的表头包含了第一个节点的位置信息。
为了在集合中找到第k个元素,就必须从表头开始,遍历第1个到第k个节点。它的时间复杂度是O(k),平均时间复杂度为O(length)。
为了在集合中删除第k个元素,就要先找到第k-1和第k个节点,使第k-1个节点的下一个节点位置信息指向第k+1个节点,然后释放第k个节点所占的空间。它的时间复杂度是O(k),平均时间复杂度为O(length)。
插入和删除的过程很相似,首先要创建一个新的节点,然后找到第k-1个节点,在该节点的后面插入新的节点,并把第k-1个节点、新的节点的下一个节点位置信息进行适当设置。它的时间复杂度是O(k),平均时间复杂度为O(length)。
采用数组描述方法的集合仅需要能够保存所有元素的空间以及保存集合最大尺寸所需要的空间。链表描述需要除集合元素本身的空间意外,还需要额外的空间,用例保存链接节点指向下一个节点位置的指针。但一般情况下,链表描述要比数值描述的空间利用率高得多。
虽然数组描述、链表描述插入和删除操作的平均时间复杂度均为O(length),但由于移动元素的操作比遍历元素的操作的开销要大得多,所以采用链表描述所实现的插入和删除操作要比数组描述执行得更快。而采用数组描述可以在常数时间内访问第k个元素,而在链表中,这种操作所需要的时间是O(k)。

...全文
119 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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