2011-08-11 6 views
-3

나는이 기능을 최적화해야하지만 메신저의 속도를 개선하기 위해 아이디어를 난처한 상황에 빠진 ... 저자와 도서의 제목. getTitles()getAuthors은 둘 다 변경할 수없는 이진 검색 함수입니다. 누구든지 이걸 도와 줄 수 있니?최적화 알고리즘

답변

1

제가 제일 먼저 보는 것은 당신이 어떤 메모리도 사전에 할당하고 있지 않다는 것입니다. 이것은 알고리즘을 변경할 수없는 알고리즘을 최적화 할 때 가장 먼저해야 할 일입니다. 이러한 구조체에 필요한 메모리 용량을 알아 내고 반복적으로 재 할당하지 못하도록 즉시 모든 데이터를 즉시 할당해야합니다.

또한 set 대신 정렬 된 벡터를 사용하는 것이 좋습니다. 이렇게하면 조회 시간이 상당히 단축됩니다. 너무 자주 삽입하지 않으면 상처를 입을 수 있습니다.

+0

각 크기마다 처음부터 경로를 생성하기 때문에 메모리를 미리 할당 할 수 없습니다. (lvl 당 커넥터의 분기 수에 따라) – SNpn

+2

다음과 같이 합리적인 최대 크기의 경로를 미리 할당하십시오. 메모리가 필요합니다. 그리고 더 큰 경로가 필요하다면 버퍼를 확장하십시오. –

0

특히 getTitles()을 만질 수 없다는 말로 최대 최적화를 배제했습니다. 루프 내부에 루프가 있습니다. 중간 루프가 범인 인 것처럼 보입니다. 즉, getTitles()은 선형 검색 알고리즘을 요구합니다. 문제의 원인이 다른 곳에있는 경우 무언가를 최적화 할 수 없습니다.

+0

getTitles()를 개선하는 데 사용할 수있는 다른 방법이 있으면 필요에 따라 변경 될 수 있지만 사양에는 손댈 필요가 없다고 말합니다 – SNpn

+1

'std :: set'과 같은 것을 반환하도록합니다. 선형 검색을 요구하지는 않습니다. 책의 저자에게도 마찬가지입니다. 그것 역시'std :: vector'를 반환하는 것으로 구현되기 때문에 선형 검색을 요구합니다. –

+0

반환 유형을 변경할 수 없습니다 (벡터로 고정됨) 포인터를 함께 사용하여 패스를 추가하면 속도가 빨라 집니까? – SNpn