JavaScript设置具有对数搜索时间的数据结构

时间:2012-08-14 16:41:20

标签: javascript algorithm data-structures

  

可能重复:
  Is there a library for a Set data type in Javascript?

有没有办法创建一个模仿c ++集的JavaScript数据结构?我需要在log(n)时间内执行搜索,但找不到任何适合的语言。我已经看到了几个问题,我应该将该集合表示为一个对象。那会有用吗?数组的密钥和有效负载是数字。

3 个答案:

答案 0 :(得分:1)

对于无序集合,使用哈希表实现可能会更好。这些执行O(1)查找,只要哈希表不会过载。

对于有序的内存集,标准答案似乎是treaps(良好的平均时间,高标准偏差)和红黑树(平均时间差,标准偏差低)。这些都是O(logn)查找。

答案 1 :(得分:0)

在javascript中它必须是一个对象。

答案 2 :(得分:0)

如果您需要有序集(允许您按照您定义的顺序从最小元素循环到最大元素),您可以在JS中实现自己的数据结构。我无法提供更多相关信息,因为我没有亲手做过。

如果您对无序集感到满意,可以按照以下方式实现:

  1. 定义要存储在集合中的对象的规范化String表示形式。如果您需要带数字的集合,只需使用数字的字符串表示。如果需要一组用户定义的对象,可以选择定义对象标识的属性,并在规范化的String表示中使用它们。
  2. 创建一个JS对象,通过将规范化的String表示映射到实际对象来设置。
  3. 可以通过使用字符串表示检查属性名称来完成搜索。
  4. 插入集合可以通过以下方式完成:首先通过搜索检查字符串表示是否已存在,然后将字符串表示映射到实际对象(如果对象尚未在集合中)。
  5. 可以使用delete删除,属性名称是要删除的对象的String表示。