根据 Missy Elliott 的歌曲 Work It,哪些数据结构既可以翻转又可以反转?

问题描述

在 Missy Elliott 的歌曲 Work It 中,她唱道:“我放下我的唐卡,翻转它,然后翻转它。”

这些歌词引起了很多笑话,包括这首经典的xkcd:https://xkcd.com/153/

我最近看到了这条推文 https://i.imgur.com/wFmIaEE.jpg ,并开始想知道哪些数据结构可以翻转和反转。

链表可以反转,但可以翻转吗?

B 树可以“翻转”,因为子节点指向父节点而不是相反,但我可能会将其描述为“反转”而不是翻转。

我认为可以通过交换索引和值来翻转数组。那么可以逆转吗?

写的歌词是:

我放下手杖,翻转并翻转它

Ti esrever dna ti pilf nwod gnaht ym tup i

这条线肯定是颠倒的,但我不认为它被颠倒了。我想如果字符颠倒了,那么它们就会被颠倒和翻转。

我正在寻找一个严肃的答案,因为我希望这会导致一个有趣的面试问题。

解决方法

没那么容易,因为大概你希望翻转和反转是不同的操作,这样你就不会得到相同的结构。您还希望它们都是真正的操作,而不仅仅是绘制不同。

唯一想到的是这个最近的SO问题,我在那里提到树的后序遍历是反向树的前序遍历的反向:Uniqueness of Inorder,Preorder,and Postorder traversal with null elements

所以...如果您想将前序遍历函数转换为后序或反之亦然,您可以将树倒下,翻转它,然后反转输出。

将前序遍历函数转换为后序遍历函数的函数就是 Missy Elliott Combinator,它的名字一点也不差。

预计到达时间:

还有,完全不相关...

您可以通过将对象反射到选定的线(翻转)然后沿轴反转它来执行 2D 对象的任何旋转。旋转角度是反射线之间角度的两倍。它也适用于沿任何 3D 向量指向对象。

这个操作显然应该被称为 Missy Eliott 轮换。