- 全排列可以使用归并排序优化的方式以o(n*log(n))转化成每个数后面有多少比它小的数的数组,在用这个数组乘反向阶乘的加权即可得完美hash码
- 当你得到了完美hash码,要转化成全排列,也可以o(n*log(n)),先转化成逆序数数组,从第一个数开始,必然第一个数后面有多少个比它小的数,唯一锁定了它的值,然后向后遍历,确定值后插入到set中o(log(n)),然后下一个数假设唯一锁定的数在set中寻找位置,假设位置是k,那么锁定的数向后偏移k个位置即可。
- 想得到每个数前面或后面有多少个数小于它或大于它使用归并排序优化,即o(nlogn)
- 想得到每个数前面或者后面第一个大于或小于它的数的位置使用单调栈(滑动窗口),即o(n)
全排列的完美hash与归并排序、单调栈的使用
最新推荐文章于 2023-02-27 13:13:54 发布