C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
- 루프를 역방향으로 반복하여 C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
- Loop Forward를 반복하여 C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
- 재귀를 사용하여 C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
- 결론
Horner의 규칙은 다항식의 값을 계산하기 위한 효율적인 알고리즘입니다.
x = 4
에서 다항식 p(x) = 6x^3 - 2x^2 + 7x + 5
를 고려하십시오. C++에서 Horner의 규칙을 사용하여 계산하려면 첫 번째 계수 6에 x의 값(4)을 곱하고 두 값의 곱인 24를 다음 계수 -2에 더합니다.
결과에 4를 곱하고 다음 계수에 더합니다.
이 프로세스는 방정식의 계수 수에 대해 반복됩니다. 남은 최종 제품은 다항식의 값입니다.
이 기사에서는 위의 규칙을 컴퓨터 코드로 변환하여 C++에서 Horner의 규칙을 사용하여 다항식의 값을 찾는 방법을 설명합니다.
다항식을 고려해 봅시다:
<사업부>
$$
p(x) = 6(x^3) - 2(x^2) + 7x + 5
$$
x = 4이면 다항식의 값은 385입니다.
루프를 역방향으로 반복하여 C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
C++에서 Horner의 규칙을 사용하여 역방향 루프를 통해 다항식의 값을 찾는 프로그램을 살펴보겠습니다.
-
코드의 첫 번째 줄은 라이브러리 패키지
iostream
을 가져옵니다. 두 번째 줄에서 네임스페이스는std
로 정의됩니다. -
메서드
int Horner()
는 계수 목록을 전달할 포인터 배열a
, 다항식의 차수를 저장하는 정수 변수n
및 다른 정수 변수x
의 세 가지 매개변수로 생성됩니다. 다항식의 값을x
에 저장합니다.int Horner(int* a, int n, int x)
-
다항식의 곱을 서로 더하는 방법을 설명합니다. 정수 변수
result
가 생성되고 배열a[n]
의 마지막 요소로 초기화됩니다.int result = a[n];
참고: 배열의 크기로 착각하지 마십시오. n번째 위치에서 배열
a
의 요소로 변수result
를 초기화합니다. -
for
루프가 생성되어 배열a
의 마지막 요소에서 0번째 인덱스까지 루프를 반전시킵니다.result
변수의 값은 각 루프 반복에 대해 업데이트됩니다.for (int i = n - 1; i >= 0; --i)
첫 번째 반복에서
a[n]
의 값에x
를 곱한 다음 배열의 이전 요소인a[n-1]
에 추가합니다. 배열{2,3,4}
의 경우 루프는 마지막 요소a[n]
(4)를 가져와x
와 곱한 다음n-1
요소에 추가합니다. 배열의 3입니다.이러한 이유로
main
함수에서 초기화하는 동안 계수를 반전시켜야 합니다.result
의 값은 메서드의 끝에서 반환됩니다. -
main
함수 내에서Horner
메소드의 첫 번째 매개변수로 전달하기 위한 배열이 생성됩니다. 루프가 역방향으로 반복되기 때문에 배열 내부의 계수 값이 반전된다는 점에 유의하십시오. -
Horner
라는 메서드에서 반환된 결과를 저장하기 위해 정수 변수sol
이 생성됩니다.첫 번째 매개변수에는 생성 중인 배열이 전달됩니다. 두 번째 매개변수는 방정식의 다항식 차수 3을 전달하고
x
의 세 번째 매개변수 값이 전달됩니다.int sol = Horner(arr, 3, 4);
암호:
#include <iostream>
using namespace std;
int Horner(int* a, int n, int x) {
int result = a[n];
for (int i = n - 1; i >= 0; --i) result = result * x + a[i];
return result;
}
int main() {
int arr[4] = {5, 7, -2, 6};
int sol = Horner(arr, 3, 4);
cout << sol;
}
출력(C++의 역방향 루프 Horner 규칙):
385
Loop Forward를 반복하여 C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
루프를 정방향으로 실행해야 하는 경우 마지막 예와 달리 배열의 포인터를 역참조하여 첫 번째 요소를 가져오고 루프를 되돌리는 대신 정방향으로 실행할 수 있습니다. C++에서 Horner의 규칙을 구현하기 위해 루프를 사용하는 또 다른 방법입니다.
코드가 무엇을 하는지 이해해 봅시다:
-
첫 번째 코드 라인은 라이브러리 패키지
iostream
을 가져옵니다. -
이전 예제와 유사하게
Horner
메소드가 3개의 매개변수로 생성됩니다.int Horner(int a[], int n, int x)
-
변수
result
가 생성되고 포인터를 역참조하여 배열의 첫 번째 요소로 초기화됩니다. 포인터*a
는arr[0]
을 쓰는 것과 동일합니다.int result = *a;
이전 예제에서
Horner
메서드는 해당 배열에 연결된 크기 구성 요소가 필요했습니다.int result = a[n];
마지막 요소를 가리킵니다. 여기서는 그냥 역참조됩니다. -
1에서
n
까지 반복되는for
루프가 생성됩니다. 각 반복에서result
변수의 값은 다항식의 값으로 업데이트됩니다.result
의 값은 메서드의 끝에서 반환됩니다.for (int i = 1; i < n; i++) result = result * x + a[i]; return result;
-
main
함수 내에서 계수 값으로 배열이 생성됩니다. 여기에 사용된 다항식은 다음과 같습니다.$$
p(x) = 5x^4 + 3x^3 - 2x^2 + 4x - 6; x=-2
$$배열은 다항식의 계수(
int arr[] = {5,3,-2,4,-6};
)를 취하여 생성됩니다. -
변수
n
은 다항식의 차수를 보유합니다.n
의 값은 다음과 같이 계산됩니다.n = 배열 크기 -1
.int n = (*(&arr + 1) - arr) - 1; // n = size of the array - 1;
-
메소드
Horner
는 배열,n
의 값 및x
의 값을 전달하여 호출됩니다. 반환된 결과는 새로운 정수 변수에 저장되어 출력됩니다.int sol = Horner(arr, n, -2); std::cout << "Value of polynomial = " << sol;
암호:
#include <iostream>
int Horner(int a[], int n, int x) {
int result = *a;
for (int i = 1; i < n; i++) result = result * x + a[i];
return result;
}
int main() {
int arr[] = {5, 3, -2, 4, -6};
int n = (*(&arr + 1) - arr) - 1;
int sol = Horner(arr, n, -2);
std::cout << "Value of polynomial = " << sol;
}
출력(C++에서 정방향 루프 Horner의 규칙):
Value of polynomial = -20
재귀를 사용하여 C++에서 Horner의 규칙을 사용하여 다항식 값 찾기
지금까지 C++에서 호너의 법칙을 이용하여 다항식의 값을 구하는 방법을 배웠습니다. 루프를 반복하고 누산기 변수를 사용하여 카운트를 업데이트하여 수행되었습니다.
이 예에서 다항식의 값은 재귀에 의해 계산됩니다. 코드를 살펴보겠습니다.
-
첫 번째 코드 라인은
iostream
패키지를 가져오고 네임스페이스를std
로 정의합니다.#include <iostream> using namespace std;
-
메소드
Horner
는 포인터 정수*pi
, 다항식의 차수인 다른 정수 변수degree
(이전 예에서n
로 사용됨) 및x
는x
에서 값을 전달하기 위한 것입니다.int Horner(int* pi, int degree, int x)
-
재귀 함수의 특징은 조건이 만족될 때까지 루프처럼 자신을 계속 호출하여 시간 복잡도를 줄이는 것입니다. 조건의 경우
if
문은 정도 값이 0으로 감소한 경우에만 0번째 인덱스에서pi
값을 반환합니다.if (degree == 0) { return pi[0]; }
-
재귀를 적용하기 위해 값을 반환하는 대신
Horner
메서드를 다시 호출합니다.return Horner(pi, degree - 1, x) * x + pi[degree];
위의 구문은
Horner
메서드가 다항식 존재 정도에 대해 반복적으로 자신을 호출하도록 유지합니다. 방정식에서 다항식의 차수는 가장 높은 지수입니다.마지막 예에서 사용한 방정식을 고려하면 다음과 같습니다.
<사업부>
$$
p(x) = 5x^4 + 3x^3 - 2x^2 + 4x - 6; x=-2
$$