悲观算法与简单性分析

2013年10月25日

下面是我们的慢排序版本:

(定义(慢排序a i j)
(当(<i j)
(设(m(商(+ij)2))
(慢速排序)
(慢排序a(+m 1)j)
(当(>(向量ref a m)(向量ref a j))
(let((t(矢量参考am)))
(向量集!a m(向量参考a j))
(向量集!a j t))
(慢排序a i(-j 1)))

我很惊讶它居然能起作用,正如这个例子所示:

>(定义x(向量4 6 7 1 5 2 3))
>(慢排序x 0 6)
>x
#(1 2 3 4 5 6 7)

您可以在以下位置运行程序http://programmingpraxis.codepad.org/aYK2UmdY.

页:1 2

6对“悲观算法和简单性分析”的回应

  1. 保罗

    Python中的Slowsort。

    定义慢排序(L):n=长度(L)如果n==1:返回L中间=n//2mx=最大值(慢排序(L[:mid])[-1],慢排序(L[mid:])[-1-)L.移除(mx)返回慢速排序(L)+[mx]
  2. 在Racket中实现较慢。

    #朗球拍(define(慢速排序!v[i 0][j(向量长度v)])(条件[(<=(-j i)1)v][其他(定义k(商(+j i)2))(慢排序!v i k)(慢排序!v k j)(定义max-a(矢量参考v(-k 1)))(定义max-b(矢量参考v(-j 1)))(向量集!v(-k 1)(最小-最大-a最大-b))(向量集!v(-j 1)(最大值-a最大值-b))(慢排序!vi(-j 1))])
  3. 朱西·皮图莱宁

    非局部,提取最小值而不是最大值。咖啡脚本。(显然,这种语言中没有整数除法,无论是地板还是其他类型的除法,但有许多“技巧”,如x|0可以截断x。)

    排序=(arr)->
    [arr,res]=[arr[0…arr.length],[]]
    当arr.length>0时
    i=最小值(arr)
    响应脉冲(i)
    k=arr.indexOf(i)
    arr[k..k]=[]
    资源

    最小值=(arr)->
    如果arr.length为1,则arr[0]
    其他
    a=排序(arr[0…arr.length/2|0])[0]
    b=排序(arr[arr.length/2|0…arr.lendth])[0]
    如果a<b,则a其他b

    控制台.log(排序([3,1,4,1,5,9,2,6])

  4. […]在已排序的数组中查找目标x的索引。我们研究了上一个练习中提到的不同算法。我让你去取报纸,享受作者的真诚[…]

  5. 迈克

    在研究慢排序算法时,我意识到,通过将A[m]与A[j]交换,完全是为了将A[m移动到位。一个更好(即更差)的算法将A[m]与A[m+1]交换,并重复直到A[m]位于列表的末尾(就像气泡排序一样)。显然,我称之为“slowersort”的改进算法更为悲观。

    def slowersort(awry,i=无,j=无):如果i为“无”:i=0如果j为无:j=长度(倾斜)-1如果i<j:m=(i+j)//2慢速运动(歪斜,i,m)慢速排序(awry,m+1,j)如果awry[m]>awry[j]:对于范围(m,j)中的k:awry[k],awry[k+1]=awry[k+1],awry[k]慢速排序(awry,i,j-1)awry=列表('hgfedcba')打印(歪斜)慢速(歪斜)打印(歪斜)
  6. 丹尼尔·福格斯

    一般来说,对于任何给定的问题,是否存在一种悲观算法(无论是在时间上还是在空间上),而在这种情况下,可证明没有任何算法更不情愿(无论是时间上还是空间上)?当然,不会有任何浪费资源的欺骗行为(无论是在时间上还是空间上)。例如,递归计算斐波那契数(无需记忆):这是斐波那奇数最慢的算法吗?

留下评论