문제

나는 과정에서 전산 복잡하고 지금까지 있었다는 인상을 수 없이 많은 도움을 지원합니다.

내가 잘못 될 수도 있지만,당신이 내려 갔 이 경로 전에,당신의 예를 제공합니다 얼마나 복잡도 이론의 도움 당신은 당신의 일에서?의 톤 감사합니다.

도움이 되었습니까?

해결책

O(1):평범하지 않고 코드 루프가 있습니다.다만 흐른다.검색에서 검색 표 O(1),too.

O(로그(n)):을 효율적으로 최적화 알고리즘이 있습니다.예제:바이너리 트리 알고리즘 및 이 검색합니다.일반적으로 다치게하지 않습니다.당신이 운이 좋다면 당신이 이러한 알고리즘을 손에 있습니다.

O(n):하나의 반복이다.아파한 매우 큰 n.

O(n*로그(n)):하는 알고리즘은 일종의 분할 정복 전략입니다.아 큰 n.전형적인 예이다:병합 정렬

O(n*n):중첩된 루프의 일부입니다.아파하는 심지어 작은 n.일반적으로 순진한 행렬을 계산합니다.당신이 피하고 싶은 이런 종류의 알고리즘을 경우 당신은 할 수 있습니다.

O(n^x x>2):악한 건축과 여러 중첩된 루프가 있습니다.아파한 매우 작 n.

O(x^n,n!그리고 더 나쁜):이상한(종종 재귀)알고리즘을 원하지 않는 생산에 있는 코드를 제외하고 매우 통제되는 경우,대한 매우 작고 있는 경우에는 정말 더 좋은 대안입니다.계산 시간가 폭발할 수 있습 n=n+1 입니다.

이 알고리즘에서 아래로 높은 복잡성 클래스를 만들 수 있습 알고리즘 플라이.생각의 푸리에 변화가 있는 O(n*n)알고리즘을 사용할 수 없으로는 1960 년대 하드웨어 드문 경우를 제외하고.다음 쿨리 및 Tukey 만든 영리한 복잡성을 감소에 의해 다시 사용하여 이미 계산한 값입니다.을 주도하는 광범위한 소개 FFT 으로 신호 처리 기능을 제공합니다.그리고 결국 그것은 또한 이유 스티브 잡스는 운을 만들었습니다.

간단한 예제:순진하는 C 프로그래머는 이것을 쓰기 정렬 루프의:

for (int cnt=0; cnt < strlen(s) ; cnt++) {
  /* some code */
}

는 O(n*n)알고리즘의 구현 때문에,strlen().중첩 루프 리드의 곱셈 복잡한 내부 big-OO(n)내부에 O(n)준 O(n*n).O(n^3)내부에 O(n)준 O(n^4).예제에서,precalculating 문자열의 길이는 것이 바로 차례로 루프 O(n). 요엘은 또한 기록합니다.

아직은 복잡성 등 모든 것을하지 않습니다.당신은에 눈을 유지하는 크기의 n.재 O(n*로그(n))알고리즘을 O(n)움이 되지 않을 경우의 번호(이선형)명령이 성장의 대규모 인해 재생산.경 n 은 작은 어쨌든,최적화하지 않게 많은뱅,too.

다른 팁

그러나 그것은 사실 하나 얻을 수 있습니다 정말로 멀리에서 소프트웨어 개발지 않고 조금의 이해를 알고리즘의 복잡성입니다.을 찾을 사용하여 지식의 복잡한 모든 시간하지만,이 시점에서 그것은 자주지 않고 그것을 실현합니다.두는 것에 대해 배우 복잡성을로 당신을 제공합 소프트웨어 개발자들을 비교하는 방법에 비슷한 알고리즘 같은 것(정렬 알고리즘은 고전적인,하지만 대부분의 사람들은 실제로 쓰기 자신의 종류).더 유용한 것은 그것을 당신은 방법으로 신속하게 설명 알고리즘이 있습니다.

예를 들어,SQL.SQL 사용하여 매일 매우 많은 수의 프로그래머를 위한 것입니다.했다면 다음과 같은 쿼리,이해하는 쿼리에는 아주 다른 경우에 당신이 공부했는 복잡합니다.

SELECT User.*, COUNT(Order.*) OrderCount FROM User Join Order ON User.UserId = Order.UserId

당신이 공부한 복잡성,다음을 이해해하면 사람이 그것을 말했었 O(n^2)일정을 의미한다.없이 복잡도 이론,사람을 것에 대해 설명하기 위해 테이블을 검사하고 같은.면 우리는 인덱스를 추가하기 위해 테이블

CREATE INDEX ORDER_USERID ON Order(UserId)

다음 위의 질 수 있습 O(n 로그 n)는 큰 차이를 만들에 대해 큰 DB,하지만 작은 하나,그것은 전혀 없습니다.

한 주장 할 수 있는 복잡도 이론이 필요하지 않습 방법을 이해하는 데이터베이스 작업,그리고 그들은 올바른 것입이지만,복잡도 이론을 제공한 언어에 대해 생각하고 말하는 알고리즘에 대한 작업이다.

대부분의 유형의 프로그래밍을 작동 이론 및 교정 유용하지 않을 수도 있습에서 자신을 하지만 그들이 무슨 일을 하는가를 제공하려고 당신의 직감할 수 있는 바로"말하는 이 알고리즘 O(n^2)그래서 우리는 그것을 실행할 수 없습에서 이러한 백만 데이터 지점".에서도 가장 초등학 처리는 다량의 데이터를 수행하습니다.

생각하고 빠르게 복잡도 이론은 나에게 중요했에서는 비즈니스 데이터 처리,GIS,그래픽,프로그래밍고 이해하는 알고리즘에서는 일반적이다.그것은 하나의 가장 유용한 수업에서 얻을 수 있 CS 연구에 비하면 당신은 일반적으로 자체 연구지 않습니다.

컴퓨터 스마트하지 않은,그들은 무엇을 할 것입니다 당신을 지시합니다.컴파일러 최적화할 수 있습니다 코드 비트,하지만 당신들은 수를 최적화 알고리즘이 있습니다.인간의 두뇌는 다르게 그리고 왜 당신이 이해할 필요가 큰 O.고려 피보나치 계산하는 숫자입니다.우리 모두 알고 있 F(n)=F(n-1)+F(n-2),그리고 시작으로 1,1 쉽게 계산할 수 있습니다 다음 숫자 많은 노력하지 않고서,선형 시간입니다.하지만 경우에 당신 컴퓨터 계산하는것으로는 수식(반복적으로)되지 않을 것 선형(적어도 필수적용어)를 대응하고 있습니다.어떻게든,우리의 두뇌는 최적화되어 알고리즘하지만,컴파일러를 할 수 없다.그래서,당신 알고리즘 을 더 나은 만들 수 있습니다.

그리고,당신은 필요한 교육,자리를 두뇌를 최적화하는 모래를 볼 때 코드가 효과가 없음을 알고,패턴 위에 나가 악한 알고리즘(측면에서 전산모사의 복잡성)과니다.기본적으로,그 과정을 제공 몇 가지:

  • 을 이해하 executional 패턴과 데이터 구조에 어떤 영향을 주는지 시간 프로그램을 완료하는 데 필요;
  • 기차 당신의 마음을 잠재적 문제에서 알고리즘을 때,그것은 비효율적일 수 있습니다 대형 데이터 세트입니다.또는 이해하는 결과가 프로파일링;
  • 배우 잘 알려진 방법을 향상 알고리즘을 줄여 자신의 복잡한 계산;
  • 한 준비를 통과의 인터뷰에서 멋진 회사)

그것은 매우 중요합니다.지 않는 경우에는 방법을 이해하고 평가하기 위해 그림 밖으로 얼마나 오래 알고리즘을 실행하는,당신은 끝날 것이 쓰는 일부를 매우 느리 코드입니다.내 생각에 대한 compuational 복잡한 모든 시간을 할 때 쓰는 알고리즘이 있습니다.그것은 뭔가가 항상 있어야 할 때 당신의 마음에 프로그래밍입니다.

이는 특히 때문에 많은 경우에는 수도에서 잘 작동 데스크톱 컴퓨터의 작은 테스트 데이터로 설정,그것은 중요한 방법을 이해하는 신속하게 응용 응답합니다 일단 당신이 그것으로 살고 있는 수백 수천명의 사람들이 그것을 사용하고 있다.

그렇다,나는 자주 사용하 Big-O 표기하거나 오히려 내가 사용하고 프로세스의 뒤에 그것은,뿐 표기 자체입니다.크기 때문에 그래서 몇 개발 조직(s)나는 빈 그것을 이해합니다.나는것을 의미하지 않는 무례하게 행동하는 사람들,하지만 제 경험,지식의 이 물건은 것들 중 하나는"종류 소년에서 남자".

이 중 하나는 사람들의 질문에만 받을 수 있는"예"라고 대답?그것은 나를 설정하는 사람들이 이해하는 계산적 복잡성과 거의 동일하게 설정하는 사람들의 생각은 그것의 중요합니다.그래서 누구나 수 있는 대답도 않는 질문을 이해하고 따라서 건너뛰기에 다음 질문으로 보다는 오히려 일시 중지에 응답해야 합니다.다만 생각;-)

가는 시점에 당신은 필요한 문제에 대한 생각들.많은 실제 문제에 필요한 조작의 대량의 데이터를...

예제:

  • 지도 응용 프로그램...Google 지도와 같은-당신은 어떻게 프로세스 도선 데이터 전세계로 끌어들이?당신은 그들을 그릴 필요가 빠르다!
  • 물류 응용 프로그램...생각이 여행 판매에 남자 스테로이드
  • 데이터 마이닝...모두 큰 기업 중 하나가 필요 합,당신은 어떻게 광산을 포함하는 데이터베이스 100 테이블과 10m+행고 유용한 결과하기 전에 트렌드를 얻을 오래 된?

과정에서 전산 복잡도를 분석하는 데 도움이 될 것입니다 선택/알고리즘을 작성하는 효율적인 위해 이러한 시나리오.

저를 믿고,뭔가 줄이는 간단 계수,말 T(3n)를 T(2n)만들 수 있는 큰 차이 때"n"은 측정서 일하지 않을 경우 개월입니다.

거기에 많은 좋은 충고 여기에,나는 확장 프로그래머가 사용되는 복잡성은 지식에 한 번하는 동안.

그러나 내가 말을 이해 복잡한 계산은 극의 분야에서 매우 중요한 게임!예를 들어,그것이"쓸모없는"물건은 종류의 물건 프로그래밍 게임에 살고있다.

면 나는 매우 몇 전문가들이 아마에 대한 관심 Big-O 로 게임 프로그래머를 위한 것입니다.

내가 사용하는 복잡성을 계산이 정기적으로 크게 때문에,저는 작품에서 공간의 도메인으로 아주 큰 데이터 세트,예를 들어,을 포함한 프로세스 수백만 때때로 수십억의 데카르트 좌표입니다.당신이 시작하면 치는 다중 차원의 문제가 복잡할 수 있 실제 문제 욕심으로 알고리즘이 될 것입 O(n)하나의 차원에서 갑자기 타 O(n^3)세 가지 차원에서 그것은 많이하지 않는 데이터를 만들이 심각한 병목 현상이 발생합니다.에서 언급했듯이 비슷한 게시물, 에,당신은 또한 큰 O 표기되고 복잡을 시작할 때 다루는 그룹의 복잡한 물체의 다양한 크기입니다.의 순서는 복잡성이 있을 수 있습 데이터에 의존하는 일반적인 경우를 수행보다 훨씬 더 나은 일반적인 케이스는 잘 설계 ad hoc 알고리즘이 있습니다.

그것은 또한 가치를 테스트하는 알고리즘 프로파일러에서 보면 무엇인가 무엇을 달성했다.내가 찾는 대부분의 병목현상을 해결을 훨씬 더 잘 알고리즘을 조정을 보다 향상된 프로세서 속도를 위해 모든 명백한 이유.

더 읽어에는 일반 알고리즘 및 그들의 복잡성이 발견 Sedgewicks 작업 모두 유익한 정보와 액세스할 수 있습니다.을 위한 공간 알고리즘 O'Rourkes 책에서는 전산기하학은 우수하다.

귀하의 정상적인 생활에,가까이하지 않은 컴퓨터를 적용해야 합 개념의 복잡성과 병렬 처리합니다.이것은 당신을 더 효율적입니다.캐시 coherency.는 종류의 것입니다.

그렇다,나는 지식의 정렬 알고리즘에서 하루를 했을 때 일종의 스택 학생이다.내가 사용하는 일종의 병합(하지만 퀵 또는 힙 정렬).프로그래밍할 때,나는 단지 사용 최상 정렬 루틴 라이브러리 제공합니다.(지 못했던 종류가 정말 많은 양의 데이터가 아직 없다.)

내가 사용하여 복잡도 이론에서 프로그래밍,모든 시간에서 주로 결정하는 데이터 구조를 사용하지만,또한 여부를 결정할 때 경우 정렬하는 것,그리고 많은 다른 결정을 내린다.

''및'no'

다)나는 자주 사용 O-표기 개발 및 구현하는 알고리즘이 있습니다.E.g.면 처리한 10^3 항목의 복잡성을 처음 알고리즘은(n O 를 로그(n))그리고 두 번째 O(n^3),당신은 단순히 말할 수 있는 첫 번째 알고리즘은 거의 실시간 동안에는 두 번째 요구에 상당한을 계산합니다.

때로는 지식에 대 한 NP 복잡성을 클래스 유용할 수 있습니다.그것은 당신을 도울 수 있을 실현할 수 있는지에 대해 생각하고 발명 효율적인 알고리즘을 때 어떤 NP-complete 문제가 될 수 있습 감소에 문제가 당신에 대해 생각입니다.

no 에)내가가 위에서 설명한 작은 부분의 복잡성을 이론이다.결과적으로 어렵다는 말을 사용하는 것,내가 사용하는 작은-작은 그것의 일부입니다.

내가 인정하는 많은 소프트웨어 개발 프로젝트지 않는 터치 알고리즘을 개발 또는 사용량에서 그들의 정교한 방법입니다.그러한 경우에 복잡도 이론은 쓸모가 없다.일반 사용자 알고리즘의 자주 사용하여 운영하는 말은'빠른'과'느리게','x 초'등등.

@마틴:자세히 설명해주실 수 있습니 생각 프로세스에까요?

그것은 되지 않을 수도 있습니다 그래서 명시적으로 앉고 작업 Big-O 표기에 대한 솔루션이지만,그것을 만들의 인식제고는 수송아지를 향해 당신을 찾고 더 효율적으로 대답하고 멀리에서 문제에 접근 방식을 취할 수 있습니다.예:O(n*n)대 뭔가 빠르게 예:단어를 검색에 저장된 목록 대에 저장된 라(예제)

내가 찾는 것은 차이가 무엇으로 데이터 구조겠 선택하여 사용,그리고 어떻게 일하는 것에 큰 숫자로 기록합니다.

좋은 예가 될 수 있다면 당신의 상사가 당신을 알려줍니다 몇 가지 프로그램을 입증할 수 있습니를 사용하여 계산 복잡도 이론에는 어떤 당신의 상사가 요구하는 당신은 가능하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top