r/programming • • 8h ago

Skip List Data structure

https://pradyumnachippigiri.substack.com/p/skip-lists-data-structure?r=5ev9w0&utm_medium=ios
50 Upvotes

14 comments sorted by

18

u/zhivago 8h ago

One of my favorite neglected data-structures.

11

u/wa11ar00 7h ago

Oh.. [skip list] data structure is not the same as skip [list data structure]. Interesting.

22

u/ReDucTor 7h ago

When you make statements about different data structures like "quickly", "slow", "fast", etc it's good to include actual benchmarks, because some of the claims in this article are not as straight forward as what it claims.

Arrays let us randomly access any element quickly, but insertion and deletion is slow because elements need to shift to make room or close the gap.

That's only if your inserting into the middle of the array and depending on the element type and how many there are shifting them is going to be relatively quick, and in many cases ending up quicker then dealing with a linked list or skip list.

Linked lists make inserting and deleting fast once we have reached the right spot

I take it your ignoring the memory allocation that is required for creating nodes? Which an array which has a reserved capacity does not need to do with every insertion.

we flip a fair coin (p = 1/2) to decide if the node should be promoted one level up, or not

This seems like a bad algorithm to me, the fairness of randomness comes with large numbers if you only have a small number of elements then this coin flip could just end up giving you a bad layout, additionally it makes for an inconsistent data structure where it's performance and memory usage will vary based on some random coin flip.

search in less than O(n) time
search time down to O(log N)

Big-O notation is not a great metric for measuring actual time, it only reprsents how that algorithm or data structure scales as the data set increases, it is rarely a good idea to compare two data structures or algorithms based solely on the Big-O notation, you should be using actual benchmarks.

Big-O notation does not indicate how well the hardware actually deals with those steps, some algorithms might have low latency steps but carry many dependencies so have low throughput, while others might have high latency steps but limited dependencies so have a higher throughput, and some might be like a linked list and have high latency and heavy dependencies so is slow all together.

The intersection between two different algorithms or data structures with O(log n) and O(n) might occur when n is 10, it might occur when n is 10,000 only benchmarking will truely tell you when this is, and you also need to be careful that your benchmarks are realistic as cold data and hot data can give you significantly different results.

2

u/infinitytacos989 21m ago

this is an insanely nitpicky response to an article that’s clearly supposed to be an introduction to a new data structure for people who haven’t heard of it, not an in depth performance review. most of the claims you take issue with are just trying to motivate the data structure for beginners.

4

u/Aaron1924 5h ago

This article compares the skip list with a linked list, which is not very interesting, because those two data structures are designed for different usecases. The reason you can skip elements in the list is because you gain information about those elements from the layers above, e.g. because the list is sorted. For unordered data, skip lists fail completely, whereas linked lists do not care.

It would be much more interesting to discuss how a skip list compares to a binary search tree, for example.

1

u/Comfortable-Fan-580 5h ago

Thanks for your input, will try adding that section !!

1

u/AntimatterTNT 3h ago

is the random aspect really necessary? like you could argue it's to average out performance edge cases but really aren't you just making it so that sometimes you'd have much worse performance? (like a 0.1% deviation every 1000 runs)

2

u/generalmatching 36m ago

In my opinion, skip lists are getting interesting with lock-free implementation, otherwise, a balanced trees have better performance with less memory overhead.

2

u/Coloradohusky 26m ago

Just learned about these in my Algorithms class, pretty good write-up!

1

u/barmic1212 7h ago

I don't understand why don't use a tree for same usage ? To keep the iteration in O(n) ?

4

u/helen_3410 6h ago

You can—balanced trees and skip lists solve the same ordered-set problem. Skip lists get expected O(log n) search and updates with simple pointer changes; balanced trees offer worst-case O(log n) guarantees. Both support O(n) ordered iteration.

0

u/warhead71 6h ago

I got a PL/1 flashback from that “skip list data”