2014-01-08 3 views
2

숫자 시퀀스 x의 곱을 반환하는 함수 prod (x)가 있다고 가정합니다.다수의 숫자를 곱하고 0에서 멈춤

x의 피연산자 수가 임의로 큰 경우 0이 발생할 때 곱셈을 중단하여 x 곱을 계산하는 시간을 줄이는 방법을 어떻게 생각할 수 있습니까? 성숙한 컴파일러와 통역사가 벌써하는 일입니까?

자신의 prod (x) 함수를 작성하는 경우 가장 좋은 방법은 무엇입니까? if 0 in x then return(0) else multiply(x) 같은 것을하는 것이 이치에 맞습니까?

예를 들어, x = 1,0,3,4,...,-4,9 인 경우 두 번째 용어를 지나서 계속 곱해야 할 필요는 없습니다. 맞습니까?

+0

실제 질문이 무엇인지 잘 모르겠습니다. 그것은 "정수리스트에 제로 값이 있는지 찾아내는 법"인가? ... 여러 개의 숫자 시퀀스가 ​​상당히 임의적이기 때문에 ("드문"이라고 읽음). 그렇다면 목록 값이 0인지 확인하여 메소드를 최적화 할 수 있습니다. 필자는 정수 배열을 곱하는 것이 아마도 내장 함수가 아니기 때문에 컴파일러가 이러한 최적화 검사를하는 것을 진지하게 생각합니다. – robnick

답변

1

를 돌려 줄 수 있도록 : 컴파일러 최적화는 대부분 주어진 소스 코드에서 수행된다. 컴파일러가 (보통) 수행하지 않을 런타임 데이터에 대한 최적화에 대해 이야기하고 있습니다. 즉, 이러한 최적화를 직접 작성해야합니다.

이 경우 : 0 일 때 실제로 멈출 수 있습니다.

2

0 0을 반환 가진 모든 곱셈, 당신이 순서에 0이 있는지 확인하고 그냥 일반적으로 0

+0

이것이 내가 조밀 한 경우 사과드립니다. 이것은 내 질문에서 제안한 조건부 수표와 같은 것에 동의한다는 뜻입니까? – Alexis

+0

그렇습니다. 그렇습니다. –

1

곱셈 연산이 작동하므로 임의의 순서로 조건을 평가할 수 있습니다. 정렬 된 숫자 시퀀스가있는 경우 첫 번째 항목이 0인지 쉽게 확인할 수 있습니다.

+0

정렬은 목록을 통한 선형 검색보다 훨씬 더 많은 사이클을 소모합니다 (0이 발생할 때까지). –

+0

확인. 목록에서 만나는 첫 번째 0은 충분한 종료 조건이되므로 일반적으로 첫 번째 인스턴스에서 중지 할 자체 선형 검색을 롤백해야합니까, 일반적으로 'A in B'작업이 어떻게 작동합니까? – Alexis

+0

당신은 아주 옳았 습니다만, 목록은 이미 정렬 된 목록에서 더 많이 사용할 것입니다. 아마도 숫자가 오름차순으로 올 것입니다! :) –

관련 문제