어떤 계산 모델이“최고”입니까?


41

1937 년 튜링은 튜링 머신을 설명했습니다. 그 이후로 실제 컴퓨터와 유사하지만 알고리즘을 설계하고 분석 할 수있을 정도로 단순한 모델을 찾기 위해 많은 계산 모델이 설명되었습니다.

결과적으로 다양한 계산 모델에 대한 SORT 문제와 같은 수십 개의 알고리즘이 있습니다. 불행하게도, 비트 벡터 연산이 허용 된 워드 RAM에서 실행 시간 O (n)을 가진 알고리즘의 구현이 실행 시간 O (n⋅logn)을 가진 알고리즘의 구현보다 더 빠르게 실행될 것이라는 것을 확신조차 할 수 없습니다. RAM이라는 단어 (물론 "좋은"구현에 대해서만 이야기하고 있습니다).

따라서 알고리즘 설계에 "최고의"기존 모델이 무엇인지 이해하고 계산 모델에 대한 최신의 자세한 설문 조사를 통해 모델의 장단점과 현실에 대한 친밀감을 제공합니다.


1
MathOverflow ( mathoverflow.net/questions/44558/… ) 에 교차 게시 되었지만 여기에 리디렉션되었습니다.
Dave Clarke

@Tatiana, 좋은 질문, "최고"란 무엇을 의미합니까? "실시간"런타임에 가까운 이론적 런타임 모델을 의미합니까?
Mohammad Al-Turkistany

8
"실제"실행 시간을 정확하게 모델링하려면 캐시를 정확하게 모델링하는 것이 중요 할 수 있습니다. 특히, 현대 컴퓨팅에는 많은 캐싱 계층 (CPU, RAM, 디스크 등)이 있으며 일부 계층은 다른 계층보다 속도가 느립니다. 캐시의 누락 횟수에 의해 알고리즘의 "실제"런타임이 결정되는 것은 의심의 여지가 없습니다. 일화 적으로, 나는 이론적 보증이 좋지 않더라도 선형 프로그래밍의 장벽 방법이 그렇게 잘 수행되는 한 가지 이유는 종종 캐시 효율이 높기 때문이라고 들었습니다.
mhum

4
내가 알 수있는 한, 흠이 말했듯이, 단어 RAM 모델에서 예상 실행 시간과 실제 실행 시간의 가장 큰 불일치는 일반적으로 데이터 검색으로 인해 발생합니다 ... 잘못된 변수는 캐시 된 메모리에 있으며 검색 시간이 느려집니다 이 때문에 엄청나게 아래로. 이론적 계층 메모리 모델을 사용하여 이것을 모델링하려는 많은 시도가 있었고, 모델이 너무 복잡하여 쉽게 작업 할 수 없기 때문에 이러한 시도가 성공했다고 생각하지 않습니다.
피터 쇼어

2
실제로 유용하다고 생각되는 알고리즘이 있고 실제로 사용 된 알고리즘을보고 싶은 경우이를 구현하기 위해 수행 할 수있는 최선의 방법은 알고리즘을 구현하거나 다른 사람이 구현하도록하는 것입니다. 실제 소프트웨어에 통합하기에 충분한 구현). 이에 대한 사례 연구는 LZW 데이터 압축 알고리즘의 이력을 살펴보십시오. 실제로, 캐싱이 사람들이 구현에 관심이없는 경우가 아니라면 캐싱이 알고리즘에 어떤 영향을 미치는지 파악하려고 시도 할 필요가 없습니다. 그렇지 않으면 아무도 결과에주의를 기울이지 않을 것입니다.
피터 쇼어

답변:


30

저는 항상 표준 Word RAM 모델을 "최고"로 생각했습니다. C와 같은 언어 (또는 Java와 같은 느슨한 언어 등)로 프로그래밍하는 법을 배운 모든 사람들은 컴퓨터를 생각할 때이 모델을 정확하게 염두에두고 있습니다.

물론 일하는 체제에 따라 일반화가 필요한 경우도 있습니다. 외부 메모리 모델은 명심해야 할 중요한 것입니다. 디스크 작업시뿐만 아니라 캐시 이해 (강제 관리)에도 적용됩니다. 물론 순수한 외부 메모리 모델은 계산을 계산하지 않기 때문에 너무 심각하게 처리하면 무의미한 결과가 발생할 수 있습니다. 워드 RAM의 또 다른 일반화는 병렬 처리에 관한 것이지만, 현재 우리는 약간 혼란 스럽습니다. :)

O(n)O(nlgn)nn

알고리즘 및 "현실성"에 대한 최종 설명 : 달성하려는 목표를 항상 명심하십시오. 알고리즘에서 작업 할 때 가장 어려운 문제 (예 : 50 개의 변수에 대한 SAT 또는 10 억 개의 숫자 정렬)를 해결하려고합니다. 200 개의 숫자를 정렬하거나 20 개의 변수에 대한 SAT를 해결하려는 경우 멋진 알고리즘이 필요하지 않습니다. 그렇기 때문에 실제로 대부분의 알고리즘은 사소한 것입니다. 이것은 알고리즘 연구에 대해 나쁜 말을하지 않습니다-우리는 어려운 일이 실제로 발생하는 1/1000의 특이한 문제에 관심이 있습니다 ...


답변 주셔서 감사합니다. RAM에 추가 할 가치가있는 일반화를 이해하고 싶습니다. 비트 벡터 연산, 병렬 처리, 캐시와 같은 모든 트릭을 포함하고 여전히 간단한 모델을 설명 할 수 있습니까?
Tatiana Starikovskaya

10

전통적인 설정을 고려하더라도 알고리즘을 슬프게 분석 할 수있는 완전히 만족스러운 계산 모델은 없습니다. 즉, 모든 데이터에 쉽게 액세스 할 수 있고 작업 공간이 효과적으로 제한되지 않는다고 가정합니다.

멀티 테이프 튜링 머신은 이론적으로 잘 정의되어 있으며 수년에 걸쳐이 모델에서 많은 알고리즘이 설계되고 분석되었습니다. 그러나 일부는 실제 컴퓨터가 실제로 21 세기에 사용하기에 좋은 모델이되기 위해 어떻게 작동하는지와 밀접한 관련이 없습니다. 다른 한편으로, 워드 -RAM 모델은 인기를 얻었으며 현대 컴퓨터의 작업 (비트가 아닌 워드에 대한 작업, 메모리 위치에 대한 일정한 시간 액세스)을보다 정확하게 캡처하는 것으로 보입니다. 그러나 이상적이지 않은 측면이 있습니다. 예를 들어, 하나의 단어 RAM 모델이 없습니다. 일정한 시간에 단어에 어떤 연산을 허용할지 먼저 지정해야합니다. 하나의 수락 된 답변이없는 많은 옵션이 있습니다. 둘째, 단어 크기 w는 일반적으로 일정한 수의 단어를 사용하여 메모리의 모든 항목을 처리 할 수 ​​있도록 입력 크기 (적어도 log (n)만큼 빠름)와 함께 증가하도록 설정됩니다. 즉, 알고리즘이 실행되거나 더 나쁜 무한한 머신 클래스를 상상해야하며, 더 많은 데이터를 제공함에 따라 머신이 변경됩니다. 이것은 적어도 내 학생들 사이에서 가장 순수한 생각입니다. 마지막으로, 단어 -RAM 모델을 사용하면 다소 복잡한 결과를 얻을 수 있는데 이는 학생으로서 배우는 것과는 맞지 않을 수 있습니다. 예를 들어,이 모델에서 두 n- 비트 수의 곱셈은 O (n) 시간이며 단순히 n- 비트 문자열을 읽는 것은 갑자기 하위 선형 시간 연산입니다. 즉, 알고리즘이 실행되거나 더 나쁜 무한한 머신 클래스를 상상해야하며 더 많은 데이터를 제공함에 따라 머신이 변경됩니다. 이것은 적어도 내 학생들 사이에서 가장 순수한 생각입니다. 마지막으로, 단어 -RAM 모델을 사용하면 다소 놀라운 복잡성 결과를 얻을 수 있는데, 이는 학생으로서 배우는 것과 일치하지 않을 수 있습니다. 예를 들어,이 모델에서 두 n- 비트 수의 곱셈은 O (n) 시간이며 단순히 n- 비트 문자열을 읽는 것은 갑자기 하위 선형 시간 연산입니다. 즉, 알고리즘이 실행되거나 더 나쁜 무한한 머신 클래스를 상상해야하며 더 많은 데이터를 제공함에 따라 머신이 변경됩니다. 이것은 적어도 내 학생들 사이에서 가장 순수한 생각입니다. 마지막으로, 단어 -RAM 모델을 사용하면 다소 놀라운 복잡성 결과를 얻을 수 있는데, 이는 학생으로서 배우는 것과 일치하지 않을 수 있습니다. 예를 들어,이 모델에서 두 n- 비트 수의 곱셈은 O (n) 시간이며 단순히 n- 비트 문자열을 읽는 것은 갑자기 하위 선형 시간 연산입니다.

모든 것을 말했지만, 알고리즘이 빠르게 실행될 가능성이 있는지 알고 싶다면 대부분 가능성이 있습니다 :-)


2
"기계가 입력 크기에 따라 커짐"문제를 피하기 위해 비트 단위 또는 워드 모델 산술 연산을 피하고 있지만 여전히 균일 한 비용의 RAM 또는 포인터 기계를 사용하고 있다면 스스로를 속이는 것 같습니다. 다른 모델에도 같은 문제가 있습니다. 그들은 어떻게 입력을 색인합니까? 답은 : 실제 컴퓨터에 메모리가 부족하지만 그럼에도 불구하고 RAM이라고 가정 할 때 알고리즘을 설계하는 것이 더 편리합니다 (또는 메모리 계층 비용을 설명하는 모델을 사용하는 것이 더 좋다). DFA.
David Eppstein

4
예를 들어, Knuth가 설명하는 RAM 모델은 w 비트로 주소를 찾는 데 시간이 걸리고 두 개의 w 비트 숫자를 추가하는 데 시간이 걸립니다. 단어에 대한 일정한 시간 연산없이 RAM 모델의 비트 수). 지난 20 년 동안 가장 널리 수용된 모델이 어떻게 바뀌 었는지, 더 이상 전혀 논의되지 않은 모델이 얼마나 흥미 롭습니다.
Raphael

8

모델은 단지 모델입니다. 나는 그것을 너무 멀리 밀지 않을 것이다. 그들은 알고리즘의 일부 측면에 대해 말하지만 사실은 아닙니다.

난 당신이 단순히 분석의 표준 워드 RAM 모델을 사용하는 것이 좋습니다 것입니다 알고리즘을 구현하고 실제로 수행하는 방법을 잘 참조하십시오.

(실제로 알고리즘을 실행하지 않고 구현하면 알고리즘에 대해 이미 많은 것을 알 수 있습니다 ... 한 가지 경우, 아마도 구현 가능합니다.)


3
글쎄, 나는 두 가지 반대 의견이 있습니다. 첫째, 그렇게 많은 이론가들은 알고리즘을 구현하지 않지만 우리는 어떻게 든 알고리즘을 비교해야합니다. 둘째, 단순성을 잃지 않고 모델에 추가 할 수있는 컴퓨터의 기능을 이해하고 싶습니다.
Tatiana Starikovskaya

11
David Johnson이 제안한 해결책은 더 많은 사람들이 알고리즘을 구현하도록하는 것입니다. 그는이를 해결하기 위해 ALENEX와 DIMACS Challenges를 시작했습니다. 나는 이것에도 경험이있다. Ken Clarkson과 함께, 나는 우리가 실제로 잘 작동한다고 생각한 무작위 볼록 껍질 알고리즘을 고안했습니다. Clarkson은 Bell Labs의 여름 학생에게 구현했습니다. 이 구현의 약속을 바탕으로 아이디어는 qhull 프로그램 (지오메트리 센터에서 작성)으로 작업되었지만 휴리스틱 속도 향상을 통해 알고리즘이 더 이상 빠르게 실행된다는 이론적 보증을 제공하지 않습니다.
Peter Shor

5

계산 작업이 (산술) 연산을 수행하는 것보다 (데이터 세트가 너무 커서 주 메모리에 맞지 않기 때문에) 데이터 이동에 관한 것이라면 I / O 모델 ( 1988 년 Aggarwal and Vitter에 의해 소개됨 ) 매우 정확할 수 있습니다. 주 메모리에 큰 요소 배열을 치환하는 것과 같은 작업의 경우 I / O 최적화 알고리즘을 신중하게 구현하는 데 도움이 될 수 있습니다.

현대식 멀티 코어 컴퓨터의 경우 2008 년 Arge, Goodrich, Nelson 및 Sitchinava가 도입 한 병렬 변형 은 정확한 모델이 될 수 있습니다.


5

당신의 인생을 더 복잡하게 만드는 "최고의"계산 모델을 의미한다면, Wolfram의 2- 상태, 3- 기호 범용 튜링 기계를 사용할 수 있습니다.

찬성 : 이성과 광기 사이에가는 선을 걷는 감각을 제외하고;

단점 : 톤 ...

:-D (농담 만, 기본적으로 이전 답변에 동의합니다 ...)


1

더 이론적 인 참고 사항 : 나노 컴퓨터의 궁극적 인 이론 모델 기사 는 가역적 인 3D 메쉬 모델이 다른 물리적 모델이 점진적으로 더 빠를 수 없다는 점에서 최적의 물리적 계산 모델 이라고 주장합니다 . 빛의 속도, Landauer의 원리Bekenstein 경계 와 같은 물리적 고려 사항 에 대해 설명합니다.

초록에서 인용하면 :

우리는 현재의 기술을 사용하여 수백 층의 회로를 포함하는 가역 기계가 기존 기계보다 성능이 뛰어나고, 나노 기술에 기반한 가역 컴퓨터는 돌이킬 수없는 기술을 능가하기 위해 몇 마이크론 만 있으면된다는 것을 알았습니다.

가역적 3D 메시의 실리콘 구현은 오늘날 특정 과학 및 엔지니어링 계산 속도를 높이는 데 유용 할 수 있으며, 모델이 광범위한 문제에 대한 병렬 알고리즘 이론에서 미래 연구의 초점이되어야한다고 제안합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.