[C로 쓴 자료구조론] 1장 연습문제-2번(Horner법칙) 풀이
두비니
·2020. 4. 30. 22:16
문제
우선 Horner의 법칙을 간단하게 알아봅시다.
https://jackpot53.tistory.com/119
그냥 여기 보고 옵시다. 여기가 설명 제일 잘되어있는듯
한줄정리를 하자면 한 항씩 계산을 하자니 효율성이 떨어져서 다른 계산했던 값들을 다시 가져다 쓰는 방법입니다.
그냥 코드로 하나하나 설명하는 방법이 훨신 나을 것 같네요
#include <stdio.h>
#define MAX_SIZE 101
double horner(int *coeff, int n, int x);
int main() {
int coeff[MAX_SIZE] = { 1, 2, 3, 4, 5 }; // 1 + 2x + 3x^2 + 4x^3 + 5x^4
int n=5; //몇차다항식인지 알려주는 상수
double result, x;
printf("x의 값은? ");
scanf(" %lf", &x);
result = horner(coeff, n, x);
printf("다항식 ");
for (int i = n - 1; i >= 0; i--) {
if (i == 0) {
printf("%d", coeff[i]);
break;
}
if (coeff[i] == 0)
continue;
printf("%d*x^%d + ", coeff[i], i);
}
printf("에서 x = %.1f일때 다항식의 값은 %.1f입니다.", x, result);
return 0;
}
double horner(int *coeff, int n, int x) {
//n번의 덧셈과 n번의 곱셈으로 해결
double result = coeff[n - 2] + coeff[n-1] * x;
for (int i = n - 3; i >= 0; i--) {
result = result * x + coeff[i];
}
return result;
}
일단 n차에 대해서 구현을 할 수도 있겠지만 귀찮아서 그냥 4차에 대해서 구현했읍니다...
n차는 입력받으면 끝인데 계수 입력받기가 귀찮아서...
아무튼 여기서 당연히 재귀함수꼴로 표현도 충분히 할 수 있을 것 같구요(for문 부분을 return으로)
마지막 출력시키는것도 신경을 조금 써서 작성했습니다.
horner함수가 잘 이해가 안된다면
이 과정을 구현한 것이니 참고하시면 좋을 것 같습니다.
'Coding_Algorithm > DS_Algorithm' 카테고리의 다른 글
[C로 쓴 자료구조론] 1장 연습문제-4번(정렬) 풀이 (0) | 2020.05.02 |
---|---|
[C로 쓴 자료구조론] 1장 연습문제-3번(Boolean출력) 풀이 (0) | 2020.05.01 |
자료/사이트 (0) | 2020.04.30 |
[C로 쓴 자료구조론] 1장 연습문제-1번 풀이 (0) | 2020.04.29 |
희소행렬 덧셈 구현 (0) | 2020.04.29 |