Splaying trees are a heavily researched of theoretical computer science as they are conjectured to be optimal binary trees. They were first presented by Sleator & Tarjan in Self-Adjusting Binary Search Trees. In their paper, on pages 19-20, they propose to reduce the number of operations needed for a splay, by only doing some of the rotations and not all. This semisplaying method is more efficient and has a noticeable better performance. It is also one of the only actual performance improvements on different splaying methods proposed. Considering all this, I have decided to implement an semisplaying tree.
The access, insert and delete operations are the same and only require a little more attention to the splaying done. However, for the join and split operations, Sleator & Tarjan state that "the join and split algorithms become more complicated", which seems that this is the case, as the operations rely on the splaying to make the accessed node (for the joining/splitting) the root of the tree. This is not the case for semisplaying as the accessed node only goes halfway up the tree.
How should you implement the join/split operations for a semi-splaying tree efficiently?
I see two solutions to this. The first is that the regular full-splaying is used when joining/splitting to ensure that the accessed node is the root of the tree. The second is that the joining/splitting happens at the accessed node halfway up the tree. This decision may be important, as a wrong implementation led to a paper stating that semisplaying is less efficient in practice.