旋转算法演示
Demonstration for rotation algorithms
在许多地方,我看到范围[begin, end)
的阵列旋转,"中点"m
实现为:
void rotate(begin, m, end)
reverse(begin, end);
reverse(begin, m);
reverse(m, end)
其中逆函数是CCD_ 3的等价函数,并且这可以很好地工作。标准库算法std::rotate
更进一步,只使用forward_iterators
进行旋转(反向需要bidirectional_iterators
)。
你知道我在哪里可以找到旋转算法的正式演示吗?或者如果有一个简单的演示可以适合SO答案,你能在这里向我解释一下吗
我将尝试提供一个视觉证明。
考虑这样一个字符串:
begin----->m--->end
应用reverse(begin, end)
将导致:
begin<---m<-----end
应用reverse(begin, m)
将导致:
begin--->m<-----end
最后reverse(m, end)
将导致:
begin--->m----->end
从而旋转琴弦。
考虑轴点m
:
begin----->m-1,m,m+1----->end-1
reverse(begin, end)
:之后
end-1----->m+1,m,m-1----->begin
reverse(begin, m)
:之后
m+1----->end-1,m,m-1----->begin
reverse(m, end)
:之后
m+1----->end-1,begin----->m-1,m
从而旋转CCD_ 14。。。m
到最后一位并旋转m+1
。。。CCD_ 17排名第一。
我在youtube上找到了一个很好的视频。这种旋转比在《编程元素》中更好地解释了,在那里,像我这样的傻瓜根本没有得到它
https://www.youtube.com/watch?v=7v3WRYLXjfI&index=11&list=PLHxtyCq_WDLW0NqZCcrrQUa24H_af6Mrn
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 与互斥锁相比,旋转锁可以保证上下文切换
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 绘制旋转的三角形
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- KMP算法和LPS表构造的运行时间
- 我可以从这个矩阵算法获得旋转吗?
- 算法 - 圆形阵列旋转
- 旋转算法演示
- 使用stl::map的std::map旋转方法或算法
- c++ 布雷森汉姆的线算法绘制弧形和旋转
- 算法旋转任意梯度90度