How to implement a set?

后端 未结 5 1240
别那么骄傲
别那么骄傲 2021-02-04 16:56

I want to implement a Set in C. Is it OK to use a linked list, when creating the SET, or should I use another approach ?

How do you usually implement your own set (if ne

相关标签:
5条回答
  • 2021-02-04 17:34

    std::set is often implemented as a red black tree: http://en.wikipedia.org/wiki/Red-black_tree

    This approach will give you much better complexity on all the listed operations.

    0 讨论(0)
  • 2021-02-04 17:44

    I have used Red-Black trees in the past to build sets.

    Here are the time complexities from the Wikipedia article.

    Space O(n)
    Search O(log n)
    Insert O(log n)
    Delete O(log n)

    0 讨论(0)
  • 2021-02-04 17:47

    Since you already have a linked list implemented, the easiest is a skip list. If you want to use balanced trees, the easiest in my opinion is a treap. These are randomized data structures, but generally they are just as efficient as their deterministic counterparts, if not more (and a skip list can be made deterministic).

    0 讨论(0)
  • 2021-02-04 17:51

    Sets are typically implemented either as red-black trees (which requires the elements to have a total order), or as an automatically-resizing hashtable (which requires a hash function).

    The latter is typically implemented by having the hashtable double in size and reinserting all elements when a certain capacity threshold (75% works well) is exceeded. This means that inidividual insert operations can be O(n), but when amortized over many operations, it's actually O(1).

    0 讨论(0)
  • 2021-02-04 17:58

    There are lot of ways for set implementation. Here are some of them. Besides MSDN have very good article on it.

    0 讨论(0)
提交回复
热议问题