charm / vector
这是一个向量实现,针对随机访问读取、pop()、push()、shift() 和 unshift() 等操作进行了优化,以实现 O(1) 的性能。
2.0.1
2024-05-28 11:48 UTC
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-08-28 12:23:21 UTC
README
一个快速且内存高效的向量实现,对于 prepend、append、shift、unshift 和随机访问等操作具有 O(1) 的性能。
底层数据结构内存高效,并且比在数组上使用 array_shift
和 array_unshift
等操作快得多。
这个向量类利用 PHP 7 的 "打包数组" 实现了一个向量,在向量最擅长的操作上具有极高的性能,同时还能提供对向量中每个元素的即时访问。
性能和内存使用
内存使用与 PHP 数组的内存使用大致相同。《Ds\Vector》PECL 库的内存占用略低,但某些操作的速度要慢得多。
拥有 10K 项
实现 | 追加 | 移位 | 前置 |
---|---|---|---|
PHP 数组 | 0.00144 秒 | 0.27727 秒 | 0.41853 秒 |
《Ds\Vector》PECL 库 | 0.00127 秒 | 0.03683 秒 | 0.03862 秒 |
《Charm\Vector》 | 0.00440 秒 | 0.00180 秒 | 0.00239 秒 |
拥有 50K 项
实现 | 追加 | 移位 | 前置 |
---|---|---|---|
PHP 数组 | 0.01462 秒 | 7.70034 秒 | 26.3000 秒 |
《Ds\Vector》PECL 库 | 0.00668 秒 | 0.98372 秒 | 0.90171 秒 |
《Charm\Vector》 | 0.03284 秒 | 0.01046 秒 | 0.01632 秒 |
向量
向量数据结构是队列和栈的内存高效替代方案。它比链表更快、更节省内存,并且具有以下 O(1) 性能特性:
- 前置
- 追加
- 从底部移除项
- 从顶部弹出项
比链表更好
- 随机访问第 n 项是 O(1)。
与链表的扩展性相同 O(n),但可能略慢
- 移除第 n 项。
比具有 O(n) 对 O(1) 的链表更差
- 从双链表中移除项时,您已经有了对项的引用,只需修改一些指针引用即可。
- 向量将需要使用
array_splice
函数将所有项移动一个偏移量。
全面测试覆盖
单元测试应该覆盖大多数(如果不是所有)使用向量的变体。