보고소트

Bogosort
보고소트
클래스정렬
데이터 구조배열
최악의 경우 공연Unbounded(임의화된 버전), O(n+1)!(일반 버전)
베스트 케이스 공연O(n)[1]
평균 공연O((n+1)![1]
최악의 경우 공간 복잡성O(1)

컴퓨터 과학에서 보고소트[1][2](순열 분류, 바보 분류 [3]또는 느림이라고[4] 함)는 생성테스트 패러다임에 기초한 매우 비효율적인 분류 알고리즘이다.함수는 정렬된 입력 순서를 찾을 때까지 연속적으로 입력 순서를 생성한다.분류에는 유용하지 않지만, 보다 효율적인 알고리즘과 대조하기 위해 교육 목적으로 사용될 수 있다.

이 알고리즘의 두 가지 버전이 존재한다. 즉, 정렬된 순열에 도달할 때까지 모든 순열을 열거하는 결정론적 버전과 [2][4]임의로 그 입력을 허용하는 임의화된 버전이 있다.후기 버전의 작업에 대한 비유는 덱을 공중으로 던지고, 카드를 무작위로 집어들고, 덱이 정리될 때까지 그 과정을 반복하여 카드 한 장을 분류하는 것이다.그것의 이름은 가짜종류라는 단어의 단어들이다.[5]

알고리즘 설명

다음은 무작위화된 알고리즘에 대한 가성코드 설명이다.

isInOrder(deck): shuffle(deck)

다음은 파이톤 3에서 다시 쓴 위와 같은 필적음이다.

로부터 무작위의 수입하다 섞다  반항하다 is_message(자료) -> 바가지 긁다:     """"데이터 정렬 여부를 결정한다."""     돌아오다 전부(a <= b 을 위해 a, b  지퍼를 채우다(자료, 자료[1:]))  반항하다 가짜의(자료) -> 리스트를 작성하다:     """ 정렬될 때까지 데이터를 섞으십시오."""     하는 동안에 아닌 is_message(자료):         섞다(자료)     돌아오다 자료 

이 코드는 다음과 같이 가정한다.dataPython의 내장형처럼 단순하고 변이 가능한 데이터 유형list—문제 없이 다양한 요소를 비교할 수 있다.

실행 시간 및 종료

보고 포트의 실험 런타임

정렬할 모든 요소가 구별되는 경우, 무작위화된 보고포트에 의해 평균 사례에서 수행되는 예상 비교 횟수는 점증적으로 (e - 1)n! 동일하며, 평균 사례에서 예상되는 스왑 횟수는 (n - 1)n!)[1]이다.예상되는 스왑의 수는 예상 비교 횟수보다 빠르게 증가하는데, 이는 요소들이 순서대로 배열되어 있지 않으면 대개 몇 가지 비교 후에 발견될 것이기 때문이다. 그러나 수집품을 섞는 작업은 그 크기에 비례한다.최악의 경우, 비교와 스왑의 수는 모두 제한되지 않으며, 이는 동전 던짐이 연속적으로 여러 번 헤딩될 수 있는 것과 같은 이유 때문이다.

주어진 리스트가 이미 정렬되어 있는 경우에 가장 좋은 경우가 발생한다. 이 경우 예상되는 비교 횟수는 n - 1이며, 스왑은 전혀 수행되지 않는다.[1]

어떤 고정된 크기의 집합에서, 알고리즘의 예상 가동 시간은 무한 원숭이 정리가 가지고 있는 것과 거의 동일한 이유로 한정된다. 즉, 올바른 순열을 얻을 가능성이 있기 때문에, 무한히 많은 시도들이 주어진다면, 그것은 결국 거의 확실히 선택될 것이다.

관련 알고리즘

고로소르트
2011년 구글 코드 잼에 도입된 분류 알고리즘이다.[6]리스트가 순서대로 나열되지 않는 한, 모든 원소의 하위 집합은 무작위로 순서가 정해진다.이 부분집합이 수행될 때마다 최적으로 선택되는 경우, 이 작업을 수행해야 하는 총 횟수의 예상 값은 잘못 배치된 요소의 수와 동일하다.
보고보고소르트
상당한 양의 목록에 있는 우주의 열사병 이전에 성공하지 않도록 설계된 알고리즘이다.그것은 목록 초기의 더 작고 더 작은 복사본으로 재귀적으로 자신을 불러 정렬되었는지 확인하는 방식으로 작동한다.베이스 케이스는 항상 정렬되는 단일 요소다.다른 경우에는 목록의 이전 요소에서 마지막 요소를 최대 요소와 비교한다.마지막 요소가 더 크거나 같을 경우 복사본 순서가 이전 버전과 일치하는지 확인하고, 같을 경우 반환한다.그렇지 않으면 현재의 리스트 사본을 개편하고 재귀적 검사를 다시 시작한다.[7]
보조소르트
무작위 번호에 기반한 또 다른 정렬 알고리즘이다.리스트가 순서대로 나열되지 않으면 무작위로 2개 항목을 골라 스와핑한 뒤 리스트가 정렬됐는지 확인한다.보조소르트의 가동시간 분석은 더 어렵지만, H. 그루버의 "지나치게 끔찍한" 무작위 정렬 알고리즘 분석에서 일부 추정치가 발견된다.[1] O(n!)는 예상 평균 사례인 것으로 밝혀졌다.
워스트소트
유한한[a] 시간에 완성될 수 있도록 보장되는 페시멀 정렬 알고리즘이지만, 그 효율성은 그 구성에 따라 임의로 나빠질 수 있다.Worstsort 알고리즘은 잘못된 분류 알고리즘인 badsort에 기반을 두고 있다.badsort 알고리즘은 정렬할 목록인 L과 재귀 깊이인 k의 두 파라미터를 허용한다.재귀 수준 k = 0에서 badsort는 입력을 정렬하고 정렬된 목록을 반환하기 위해 버블포트 같은 공통 정렬 알고리즘만 사용한다.즉, 배드소트(L, 0) = 버블소트(L)이다.따라서 badsort의 시간 복잡성은 k = 0이면 O(n2)이지만, 어떤 k > 0에 대해서도 badsort(L, k)는 먼저 L의 모든 순열 목록인 P를 생성한다.그런 다음 배드소트배드소트(P, k - 1)를 계산하고, 정렬된 P의 첫 번째 요소를 반환한다.worstsort 진정으로 페시멀을 만들기 위해 를 f: N {: f(n) = A(n, n), 여기서 A는 Ackermann의 함수)와 같은 계산 가능한 증가함수의 값에 할당할 수 있다.Ergo, 목록을 임의로 잘못 정렬하려면 bestsort(L, f) = badsort(L, 길이(L))를 실행해야 하는데 여기서 길이(L)L의 원소 수입니다.The resulting algorithm has complexity , where = n번 반복된 m번의 요인.이 알고리즘은 충분히 빠르게 성장하는 함수 f를 선택함으로써 원하는 만큼 비효율적으로 만들 수 있다.[8]
슬로우토트
엄청난 복잡성을 달성하기 위해 잘못된 분할 및 분할 전략을 사용하는 다른 유머러스한 정렬 알고리즘.

퀀텀 보고포트

Quantum bogosort는 컴퓨터 과학자들 사이에서 인조크(in-joke)로 만들어진, 보고르트를 기반으로 한 가상의 분류 알고리즘이다.이 알고리즘은 엔트로피의 양자 소스를 사용하여 입력의 임의 순열을 생성하며, 목록이 정렬되어 있는지 확인하고, 그렇지 않으면 우주를 파괴한다.다세계 해석이 유지된다고 가정할 때, 이 알고리즘을 사용하면 입력이 O(n) 시간에 성공적으로 정렬된 적어도 하나의 생존 우주를 얻게 될 것이다.[9]

참고 항목

메모들

  1. ^ "최적"의 반대

참조

  1. ^ a b c d e f Gruber, H.; Holzer, M.; Ruepp, O., "Sorting the slow way: an analysis of perversely awful randomized sorting algorithms", 4th International Conference on Fun with Algorithms, Castiglioncello, Italy, 2007 (PDF), Lecture Notes in Computer Science, vol. 4475, Springer-Verlag, pp. 183–197, doi:10.1007/978-3-540-72914-3_17.
  2. ^ a b Kiselyov, Oleg; Shan, Chung-chieh; Friedman, Daniel P.; Sabry, Amr (2005), "Backtracking, interleaving, and terminating monad transformers: (functional pearl)", Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming (ICFP '05) (PDF), SIGPLAN Notices, pp. 192–203, doi:10.1145/1086365.1086390, S2CID 1435535, archived from the original (PDF) on 26 March 2012, retrieved 22 June 2011
  3. ^ E. S. 레이먼드."bogo-sort".새로운 해커의 사전.MIT 프레스, 1996.
  4. ^ a b Naish, Lee (1986), "Negation and quantifiers in NU-Prolog", Proceedings of the Third International Conference on Logic Programming, Lecture Notes in Computer Science, vol. 225, Springer-Verlag, pp. 624–634, doi:10.1007/3-540-16492-8_111.
  5. ^ "bogosort". xlinux.nist.gov. Retrieved 11 November 2020.
  6. ^ Google 코드잼 2011, 예선전, 문제 D
  7. ^ 보고보고소르트
  8. ^ Lerma, Miguel A. (2014). "How inefficient can a sort algorithm be?". arXiv:1406.1077 [cs.DS].
  9. ^ "Intelligent Design Sort or Quantum BogoSort". OpenGenus IQ: Computing Expertise & Legacy. 18 February 2018. Retrieved 24 August 2021.

외부 링크