【问题标题】:Generalisation of pancake sorting with arbitrary flipped slices?用任意翻转切片泛化煎饼排序?
【发布时间】:2015-02-12 10:25:19
【问题描述】:

pancake sort 中,主要操作是:翻转所有高于给定位置的煎饼。在两个给定位置之间翻转所有煎饼怎么样?有谁知道这个有没有研究过?

为了说明这个问题,这里有一个 Python 2.7 中的快速暴力、贪婪实现(虽然不太确定它是否总是收敛):

def sort(a):
    entropy = 0
    for i in range(len(a) - 1):
        entropy += abs(a[i] - a[i+1])
    while True:
        max_improvement = 0
        for i in range(len(a) - 1):
            for j in range(i + 1, len(a)):
                improvement = 0
                if i > 0:
                    improvement += abs(a[i] - a[i-1]) - abs(a[j] - a[i-1])
                if j < len(a) - 1:
                    improvement += abs(a[j] - a[j+1]) - abs(a[i] - a[j+1])
                if improvement > max_improvement:
                    max_improvement = improvement
                    (next_i, next_j) = (i, j)
        if max_improvement == 0:
            if a and a[0] > a[-1]:
                a[:] = a[::-1]
                print a
            return
        entropy -= max_improvement
        a[next_i:next_j+1] = a[next_i:next_j+1][::-1]
        print a

a = [7, 1, 3, 8, 6, 0, 4, 9, 2, 5]
print a
sort(a)

输出:

[7, 1, 3, 8, 6, 0, 4, 9, 2, 5]
[7, 6, 8, 3, 1, 0, 4, 9, 2, 5]
[7, 6, 8, 9, 4, 0, 1, 3, 2, 5]
[7, 6, 8, 9, 4, 5, 2, 3, 1, 0]
[9, 8, 6, 7, 4, 5, 2, 3, 1, 0]
[9, 8, 7, 6, 4, 5, 2, 3, 1, 0]
[9, 8, 7, 6, 5, 4, 2, 3, 1, 0]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

【问题讨论】:

  • 你到底想要什么?否或是+对论文的引用? Stackoverflow 似乎不是那个地方...
  • 是的,我想知道这个问题是否已知,在这种情况下,参考论文会很棒。至于问这个问题的正确地方,我已经浏览了 StackExchange 站点列表,但找不到比 StackOverflow 更合适的地方。我错过了什么吗?
  • 查看help center:“要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的人答案和垃圾邮件。”我不确定是否有任何 SE 网站适合这个问题,但也许 CS 最接近。
  • 我认为帮助中心的建议旨在防止类似“什么是学习 C++ 的好资源?”的问题,这会导致大量主观答案。我的问题是“有没有研究过这个问题?(可能的推论:以哪个名字?由谁?在哪篇论文中?所有这些都是事实)。感谢指向 CS 的指针,这实际上似乎更合适。我将重新发布我的那里的问题。

标签: algorithm sorting bibliography


【解决方案1】:

根据评论者的建议,我在CS StackExchange Beta 上交叉发布了这个问题,它很快就收到了我正在寻找的答案:这个问题被称为反转排序

这是一个有效的Python implementation

注意:因为there are no guarantees that a current SE site will live past beta,我想在这里保持我的问题开放,恕我直言,它同样是主题。如果违反 StackExchange 礼仪,请随意关闭它。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2021-03-24
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多