입문 CS 과정에 대한 최종 시험에서 방금이 질문을했습니다. 나는 그것이 꽤 흥미 롭다라고 생각했다. 그러나 나는 그것을 완전히 이해할 수 없었다. 나는 이클립스에서 잠시 동안 코딩을 시도했지만 어디에도 가지 않았다. 나는 Biochem 시험을 곧 치러야하므로 정말 공부해야한다. 그러나 이것은 나를 괴롭 히고있다 ... 나는 도움을 청할 것이라고 생각했다.의사 코드/자바 기본 배열 합산 알고리즘
질문 - 다음 알고리즘을 작성하십시오. 입력 배열 A와 2 개의 인덱스 start와 stop이 주어지면이 둘 사이의 합계를 계산하십시오. 배열이 정렬되고 모든 요소가 집합 {1, 2, 3}에 속합니다. 이 알고리즘은 O (log (n))에서 실행해야합니다. 그래서 배열을 지정해, {1, 1, 2, 2, 3, 3, 3, 3} 인덱스 1과 5로 이것은 내가 지금까지 무엇을 가지고 11
반환 :
public static int findSum(int[] a, int start, int stop) {
int sum = 0;
int temp[] = new int[4];
int mid = (start+stop)/2;
while (mid > start || mid < stop) {
if (a[mid+1]-a[mid] != 0) {
temp[mid+1] = mid+1;
temp[mid] = mid;
mid++;
}
else {
findSum(a, start, mid);
findSum(a, mid+1, stop);
}
}
for (int i = 4; i > 0; i--) {
if (temp[i] == 0) {
temp[i] = temp[i-1];
}
}
for (int i = 1; i < 4; i++) {
sum += i*(temp[i]-temp[i-1]);
}
return sum;
}
내 논리가 맞다면 모르겠다.하지만 내 생각은 숫자가 바뀌는 배열에서 인덱스를 찾고 배열을 두 부분으로 나누는 재귀 적 방식으로 그렇게하는 것이다. 이 인덱스를 사용하면 숫자가 나타나는 빈도를 결정할 수 있으므로이 빈도로 숫자를 곱하고 합계를 계산하기 위해 이들을 더합니다.
내 알고리즘은 거기에 많은 결함을 가지고 확신 ... 이제 데이터가 만 1, 2, 3있을 것이라는 점을 포함하도록 질문을 업데이트했는지
이 질문은 * 검색 * 알고리즘에 관한 것이 아니 었습니까? 즉 [이진 검색] (http://en.wikipedia.org/wiki/Binary_search_algorithm). 배열 범위의 모든 것을 추가 할 때, 당신은 O (n) 연산을 가질 것입니다 : 당신은 필연적으로 범위 내의 모든 수를 계산해야 할 것입니다. 배열이 이미 정렬되었으므로, 나는이 질문이 당신에게 바이너리 검색 알고리즘을 작성하도록 요구하고 있다는 것을 이미 확신한다. – Rogue
당신은 당신의 질문을 업데이트했고 당신이 지금 묻고있는 것을보고, 대답합니다. – Rogue