实用数据结构解析
1. 引言
在算法实现中,普通列表能满足多数算法的效率需求,但部分算法需要更专业的数据结构,如对称列表、随机访问列表和数组。这些数据结构旨在克服标准列表某些基本操作运行时间上的明显不足。
2. 对称列表
2.1 基本概念
标准列表的部分操作在效率上存在不平衡。例如,在列表头部添加元素是常数时间操作,而在尾部添加则是线性时间操作。对称列表通过将列表分为两部分并反转后半部分,保证了六种基本操作( cons 、 snoc 、 head 、 last 、 tail 、 init )的摊还常数时间。
对称列表定义为:
type SymList a = ([a],[a])
其中, (xs, ys) 表示标准列表 xs ++ reverse ys 。可以通过以下函数将对称列表转换为标准列表:
fromSL::SymList a →[a]
fromSL (xs,ys) = xs++reverse ys
对称列表还需维护两个不变式:
null xs ⇒ null ys ∨
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



