Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346199
  • 博文数量: 105
  • 博客积分: 2730
  • 博客等级: 少校
  • 技术积分: 1110
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-20 12:09
文章分类

全部博文(105)

文章存档

2013年(3)

2012年(2)

2011年(36)

2010年(34)

2009年(6)

2008年(20)

2007年(4)

分类: PHP

2011-06-17 16:04:35

累加数组

  1. :: Ix i
  2. => (e -> a -> e)  --累加函数, 初始值(列表中的值)和累加值可以是不同类型
  3. -> e              --初始值
  4. -> (i, i)         --数组的边界
  5. -> [(i, a)]       --被处理的关联列表,(坐标, 值)
  6. -> Array i e
[pearls]第一章用到的checklist就是用accumArray实现的.
checklist用来记录一组数据中出现了指定范围内的哪些数字. 比如检查某list中在区间[2,5]之间的有哪些元素.

  1. checklist :: [Int] -> Array Int Bool

--函数 把一组输入转化成坐标为Int, 值为Bool的表.
用checklist检查一组数中不存在的最小的自然数(含0), 比如[0,1,2,4,5] 不存在的最小数就是3

  1. checklist xs = accumArray (||) False (0, n) (zip (filter (<= n) xs) (repeat True))
  2. where n = length xs

另一个效率更高的数据结构是Data.Array.ST 不过这个不是pure的.


阅读(616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~