我正在用 C++ 编写算法,为此我需要一个数据结构来存储一系列n
数据点。也就是说,我想存储元素v[0],v[1],...,v[n-1]
。我确实关心订单。
我想要快速的操作是:
- 顺序访问(即访问
v[0]
、 thenv[1]
等,并具有编辑值的能力); 点重定位,即
{v[0],v[1],...,v[i],v[i+1],...,v[j-1],v[j],v[j+1],...,v[n-1]}
->{v[0],v[1],...,v[i],v[j],v[i+1],...,v[j-1],v[j+1],...,v[n-1]}
;部分反转,即
{v[0],...,v[i],v[i+1],...,v[j-1],v[j],v[j+1],...,v[n-1]}
->{v[0],...,v[i],v[j],v[j-1],...,v[i+1],v[j+1],...,v[n-1]}
。
看来,我可以使用XOR-linked list来实现我的算法,并且它会给出最小的复杂度(上面的操作将是O(1)
,给出O(n^2)
我的算法)。但我知道,异或链表被认为是“丑陋的数据结构”([1],[2])。
有什么比这更好的数据结构?更准确地说,有没有其他常用的数据结构,O(1)
及时实现这些操作?