나는 소프트웨어의 분류 알고리즘과 O(nlogn)
장애물을 극복 할 수있는 가능한 방법에 대해 생각하고있었습니다 . 실용적인 의미에서 더 빨리 정렬하는 것이 가능하지 않다고 생각하므로 그렇게 생각하지 마십시오.
즉, 거의 모든 정렬 알고리즘에서 소프트웨어는 각 요소의 위치를 알아야합니다. 그렇지 않으면 정렬 기준에 따라 각 요소를 배치 할 위치를 어떻게 알 수 있습니까?
그러나이 생각을 현실 세계와 교차 시켰을 때 원심 분리기는 분자를 밀도별로 ‘분류’할 때 각 분자가 어떤 위치에 있는지 전혀 모릅니다. 사실, 각 분자의 위치는 신경 쓰지 않습니다. 그러나 각 분자가 밀도와 중력 법칙을 따르기 때문에 비교적 짧은 시간에 수조 개의 항목을 분류 할 수 있습니다.
목록의 순서를 ‘강제’하기 위해 각 노드에 약간의 오버 헤드 (각 노드에 고정 된 일부 값 또는 방법)가있을 수 있습니까? 원심 분리기와 같은 것으로, 각 요소 만 다른 노드와 관련하여 공간에서 상대적 위치에 관심을 갖습니다. 아니면 이것은 계산의 일부 규칙을 위반합니까?
여기에서 제기 된 가장 큰 포인트 중 하나는 자연의 양자 역학적 효과와 그것이 모든 입자에 동시에 어떻게 동시에 적용되는지입니다.
아마도 고전적인 컴퓨터는 본질적으로 정렬을의 도메인으로 제한하는데, O(nlogn)
양자 컴퓨터는 그 임계 값을 O(logn)
병렬로 작동하는 알고리즘 으로 넘어갈 수 있습니다 .
원심 분리기가 기본적으로 병렬 기포 정렬 이라는 점은 정확 해 보이며 시간 복잡도가 O(n)
.
다음 생각은 자연이 분류 할 수 있다면 O(n)
왜 컴퓨터는 할 수 없다는 것입니다.
답변
편집 : 원심 분리기의 메커니즘을 오해했으며 비교를 수행하는 것으로 보입니다. 그러나 두 속성을 비교하는 대신 정렬되는 항목의 속성에서 작동하는 물리적 프로세스가 있습니다. 이 답변은 그 성격의 알고리즘을 다룹니다.
원심 분리기는 요소 간의 비교를 통해 실제로 작동하지 않는 정렬 메커니즘을 적용하지만 실제로는 각 개별 요소의 속성 ( ‘원심력’)에 의해 격리됩니다. 일부 정렬 알고리즘, 특히 Radix Sort 가이 테마에 속합니다 . 이 정렬 알고리즘이 병렬화되면 원심 분리기의 예에 접근해야합니다.
다른 비 비교 정렬 알고리즘으로는 Bucket sort 및 Counting Sort가 있습니다. Bucket 정렬은 원심 분리기의 일반적인 개념에도 적합하다는 것을 알 수 있습니다 (반경은 빈에 해당 할 수 있음).
각 요소가 격리 된 것으로 간주되는 또 다른 소위 ‘정렬 알고리즘’은 Sleep Sort 입니다. 여기서 원심력보다는 시간이 분류에 사용되는 크기로 작용합니다.
답변
계산 복잡성은 항상 일부 계산 모델과 관련하여 정의됩니다. 예를 들어, 알고리즘 O를 ( N 전형적인 컴퓨터)가있을 O (2 N 로 구현되는 경우) 브레인 퍽 .
원심 분리기 계산 모델에는 몇 가지 흥미로운 속성이 있습니다. 예를 들면 :
- 임의의 병렬 처리를 지원합니다. 솔루션에있는 입자의 수에 관계없이 모두 동시에 정렬 할 수 있습니다.
- 그것은 질량에 의해 엄격한 선형 종류의 입자를 제공하는 것이 아니라 매우 가까운 (저에너지) 근사치를 제공합니다.
- 결과에서 개별 입자를 검사하는 것은 불가능합니다.
- 다른 속성으로 입자를 정렬하는 것은 불가능합니다. 질량 만 지원됩니다.
우리가 범용 컴퓨팅 하드웨어에서 이와 같은 것을 구현할 능력이 없다는 점을 감안할 때, 모델은 실질적인 관련성이 없을 수 있습니다. 그러나 그것으로부터 배울 것이 있는지 알아보기 위해 여전히 검토 할 가치가 있습니다. 예를 들어 비 결정적 알고리즘 과 양자 알고리즘 은 둘 다 오늘날 실제로 구현할 수 없지만 둘 다 활발한 연구 영역이었습니다.
답변
트릭은 원심 분리기를 사용하여 목록을 정렬 할 확률 만 있다는 것입니다. 다른 실제 정렬 [인용 필요]과 마찬가지로 목록을 정렬 할 확률을 변경할 수 있지만 모든 값 (원자)을 확인하지 않고는 확신 할 수 없습니다.
“원심 분리기를 얼마나 오래 가동해야합니까?”라는 질문을 고려하십시오.
피코 초 동안 만 실행하면 샘플이 초기 상태보다 덜 정렬 될 수 있습니다. 또는 며칠 동안 실행하면 완전히 정렬 될 수 있습니다. 그러나 실제로 내용을 확인하지 않으면 알 수 없습니다.
답변
컴퓨터 기반 “주문”의 실제 예는 “드론 떼”로 알려진 서로 협력하여 작동하는 자율 드론입니다. 드론은 개인과 그룹으로 행동하고 소통하며 여러 표적을 추적 할 수 있습니다. 드론은 어떤 드론이 어떤 목표물을 따라갈 것인지, 그리고 드론 간의 충돌을 피해야 할 명백한 필요성을 종합적으로 결정합니다. 초기 버전은 대형을 유지하면서 웨이 포인트를 통과하는 드론 이었지만 대형은 바뀔 수 있습니다.
“정렬”의 경우, 드론은 특정 순서로 선이나 패턴을 형성하도록 프로그래밍 할 수 있으며 처음에는 임의의 순열 또는 모양으로 출시되며 집합 적으로 병렬로 정렬 된 선 또는 패턴을 빠르게 형성 할 수 있습니다.
컴퓨터 기반 정렬로 돌아가서, 한 가지 문제는 하나의 주 메모리 버스가 있고 많은 수의 개체가 메모리에서 병렬로 이동할 방법이 없다는 것입니다.
각 요소의 위치를 알고
테이프 정렬의 경우 각 요소 (레코드)의 위치는 컴퓨터가 아니라 “테이프”에만 “알려져”있습니다. 테이프 기반 정렬은 한 번에 두 개의 요소와 테이프에서 실행 경계를 표시하는 방법 (파일 표시 또는 다른 크기의 레코드) 만 사용하면됩니다.
답변
IMHO, 사람들은 log (n)를 지나치게 생각합니다. O (nlog (n))은 거의 O (n)입니다. 그리고 데이터를 읽으려면 O (n)이 필요합니다.
quicksort와 같은 많은 알고리즘은 요소를 정렬하는 매우 빠른 방법을 제공합니다. 실제로 매우 빠른 Quicksort 변형을 구현할 수 있습니다.
본질적으로 모든 물리적 시스템은 무한히 평행합니다. 모래 알갱이에 원자가 많을 수 있습니다. 자연은 각 원자의 각 전자가 있어야하는 위치를 파악할 수있는 충분한 계산 능력을 가지고 있습니다. 따라서 충분한 계산 리소스 (O (n) 프로세서)가 있다면 log (n) 시간에 n 개의 숫자를 정렬 할 수 있습니다.
댓글에서 :
-
k 개의 요소가있는 물리적 프로세서가 주어지면 최대 O (k)의 병렬성을 달성 할 수 있습니다. n 개의 숫자를 임의로 처리하면 k와 관련된 속도로 처리됩니다. 또한이 문제를 물리적으로 공식화 할 수 있습니다. 인코딩하려는 숫자에 비례하는 가중치를 가진 n 개의 강철 볼을 만들 수 있으며, 이론상 원심 분리기로 해결할 수 있습니다. 그러나 여기서 사용하는 원자의 양은 n에 비례합니다. 표준의 경우 프로세서에 제한된 수의 원자가 있습니다.
-
이에 대해 생각하는 또 다른 방법은 각 번호에 작은 프로세서가 연결되어 있고 각 프로세서가 인접 장치와 통신 할 수 있다고 가정하면 모든 번호를 O (log (n)) 시간으로 정렬 할 수 있습니다.
답변
대학을 시작했을 때 고등학교 졸업 후 여름 사무실에서 일했습니다. 나는 AP 컴퓨터 과학, 다른 것들 중에서 분류와 검색을 공부했습니다 .
이 지식을 기억할 수있는 여러 물리적 시스템에 적용했습니다.
시작하려면 자연스러운 병합 정렬…
시스템은 파일 카드 크기의 떼어 내기를 포함하여 여러 부분으로 된 양식을 인쇄했으며,이 양식은 서랍에 보관해야했습니다.
나는 그것들의 더미로 시작하여 더미를 분류했습니다. 첫 번째 단계는 손에 쉽게 배치 할 수있을 정도로 5 개 정도를 집는 것입니다. 정렬 된 패킷을 아래에 놓고 각 스택을 십자형으로 분리하여 보관하십시오.
그런 다음 각 스택 쌍을 병합 하여 더 큰 스택을 생성합니다. 스택이 하나만 될 때까지 반복합니다.
… 완료 할 삽입 정렬
다음 카드는 동일한 열린 서랍에서 조금 더 아래에 있기 때문에 분류 된 카드를 정리하는 것이 더 쉽습니다.
기수 정렬
이 사람은 반복적으로 가르치려고 했음에도 불구하고 내가 어떻게 그렇게 빨리했는지 이해하지 못했습니다.
큰 상자의 체크 스텁 (천공 카드 크기)을 분류해야합니다. 큰 테이블에서 솔리테어를하는 것처럼 보입니다. 거래하고, 쌓고, 반복하세요.
일반적으로
30 년 전, 나는 당신이 무엇에 대해 물어보고 있는지 알아 차 렸습니다. 비교 와 기록 처리에 상대적인 비용 과 캐싱 수준이 있기 때문에 아이디어가 물리적 시스템으로 매우 직접적으로 이전됩니다 .
잘 이해 된 등가물을 넘어서
나는 당신의 주제에 대한 에세이를 회상하고 그것은 스파게티 종류를 가져 왔습니다 . 키 값을 표시하기 위해 말린면의 길이를 다듬고 레코드 ID로 레이블을 지정합니다. 이것은 O (n)이며 각 항목을 한 번만 처리합니다.
그런 다음 번들을 잡고 테이블의 한쪽 끝을 탭합니다. 아래쪽 가장자리에 정렬되고 이제 정렬됩니다. 가장 긴 것을 사소하게 벗고 반복 할 수 있습니다. 판독 값도 O (n)입니다.
여기 “실제 세계”에서 알고리즘에 해당하지 않는 두 가지 일이 있습니다. 첫째, 가장자리 정렬은 병렬 작업입니다. 모든 데이터 항목은 프로세서이기도합니다 (물리 법칙이 적용됩니다). 따라서 일반적으로 사용 가능한 처리를 n으로 확장하여 기본적으로 고전적인 복잡성을 n의 요소로 나눕니다.
둘째, 가장자리를 정렬하면 정렬이 어떻게 이루어 집니까? 실제 정렬은, 비록 당신이 한 단계에서 가장 긴 발견 할 수있는 판독에 않은 가장 긴을 찾기 위해 그들 모두를 비교합니다. 다시, n의 계수로 나누면 가장 큰 것을 찾는 것은 이제 O (1)입니다.
또 다른 예는 아날로그 컴퓨팅을 사용하는 것입니다. 물리적 모델은 문제를 “즉시”해결하고 준비 작업은 O (n)입니다. 원칙적으로 계산은 준비된 항목 수가 아니라 상호 작용하는 구성 요소의 수에 따라 확장됩니다. 따라서 계산은 n²로 확장됩니다. 제가 생각하는 예는지도에 구멍을 뚫고 구멍을 통과하는 문자열에 가중치를 걸고 고리에 모든 문자열을 모아서 수행 된 가중 다중 요소 계산입니다.
답변
정렬은 여전히 총 시간 O (n)입니다. 그것보다 더 빠르다는 것은 Parallelization 때문입니다 .
원심 분리기 는 n 개의 코어에 대해 병렬화 된 n 개의 원자 버킷 으로 볼 수 있습니다 (각 원자는 프로세서 역할을 함).
병렬화를 통해 정렬 속도를 높일 수 있지만 프로세서 수가 제한되어 있고 O (n / C)는 여전히 O (n) (CPU의 코어가 10 개 미만이고 GPU가 6000 미만)이기 때문에 상수 요소로만 정렬 할 수 있습니다.