请问这段对于TCollection的理解没有错吧?多谢! ( 积分: 100 )

  • 主题发起人 主题发起人 5415
  • 开始时间 开始时间
5

5415

Unregistered / Unconfirmed
GUEST, unregistred user!
请问这段对于TCollection的理解没有错吧?多谢!

Turbo Pascal有一个比较好的数据结构,叫TCollection,而在Delphi下,被容器类给占用了这个名字。这种结构也退出了Delphi的普通数据结构中。

他的原理很简单。其实用了内存访问中的“段”的意思。

const
ItemsCount = 100;
HalfCount = ItemsCount div 2;
SegmentCount = 10000;

type
PSegment = ^TSegment;
TSegment = array [0..ItemsCount - 1] of Pointer;

PSegmentItem = ^TSegmentItem;
TSegmentItem= record
UsedCount: Integer;
Items: PSegment;
end;

PSegmentList = ^TSegmentList ;
TSegmentList = array [0..SegmentCount - 1] of TSegmentItem;

这样,追加操作O(1)。删除操作段不为空,只做回收操作,O(1),删除后如果段为空,是O(n)的算法。插入算法,如果某个段不满,那就是O(1)。如果某个段已经满了,再插入还是O(n)的算法。但这两个操作相对于纯粹的数组消耗的时间是数组算法消耗的时间除以ItemsCount。

遍历访问,需要全局索引转换为访问Item的段索引和Item内部索引,需要遍历。但相对于链表这种纯粹一个个遍历而言,速度还是快很多。也是链表访问的时间除以ItemsCount。

这种数据结构的存在,一部分纯粹是空间换时间,一部分是对数组插入算法和链表访问算法的不足,取得一个折衷方案。对于插入删除内容访问都非常频繁的程序,这个将是上选。

可能是保存的是一个个Item,所以原来命名为TCollection。
 
请问这段对于TCollection的理解没有错吧?多谢!

Turbo Pascal有一个比较好的数据结构,叫TCollection,而在Delphi下,被容器类给占用了这个名字。这种结构也退出了Delphi的普通数据结构中。

他的原理很简单。其实用了内存访问中的“段”的意思。

const
ItemsCount = 100;
HalfCount = ItemsCount div 2;
SegmentCount = 10000;

type
PSegment = ^TSegment;
TSegment = array [0..ItemsCount - 1] of Pointer;

PSegmentItem = ^TSegmentItem;
TSegmentItem= record
UsedCount: Integer;
Items: PSegment;
end;

PSegmentList = ^TSegmentList ;
TSegmentList = array [0..SegmentCount - 1] of TSegmentItem;

这样,追加操作O(1)。删除操作段不为空,只做回收操作,O(1),删除后如果段为空,是O(n)的算法。插入算法,如果某个段不满,那就是O(1)。如果某个段已经满了,再插入还是O(n)的算法。但这两个操作相对于纯粹的数组消耗的时间是数组算法消耗的时间除以ItemsCount。

遍历访问,需要全局索引转换为访问Item的段索引和Item内部索引,需要遍历。但相对于链表这种纯粹一个个遍历而言,速度还是快很多。也是链表访问的时间除以ItemsCount。

这种数据结构的存在,一部分纯粹是空间换时间,一部分是对数组插入算法和链表访问算法的不足,取得一个折衷方案。对于插入删除内容访问都非常频繁的程序,这个将是上选。

可能是保存的是一个个Item,所以原来命名为TCollection。
 
我明白了此结构.
他其实就是结合了数组的优势到里边,也就是把单个的节点的访问变成依次可定位多个节点.
不过对于顺序遍历,他不会站到任何便宜.他的优势其实就是他的折衷,他为链表结构添加了一定的随机访问能力.因此其实并无任何特殊之处.数据结构本来就是需要根据需要选择.
 
5415又出现了,居然能正经提问,是不是ID被盗了?
不知这个对你的问题是否有帮助:http://www.china-askpro.com/msg29/qa24.shtml
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部