일원 다항식 곱 하기 를 구하 다
2032 단어 재 미 있 는 문제 분석 과 해답
이것 은 내 가 구직 하 는 동안 모 회사 의 현장 프로 그래 밍 문제 다.나 는 시험 을 위해 필사적으로 문 제 를 풀 어 높 은 점 수 를 받 고 저능 하 게 하 는 것 을 예로부터 좋아 하지 않 았 다.나 는 분석 과 해결 능력 이 좋다 고 생각 했 지만 이 문 제 를 만 나 서 정말 멍 해 졌 다.그 때 는 대충 생각해 보 았 는데 두 단계 로 나 누 지 않 았 다. 먼저 여러 가지 식 을 데이터 구조 로 표시 한 다음 에 데이터 구 조 를 연산 하면 된다.Matlab 에서 여러 가지 벡터 표현법 을 생각하면 첫 번 째 단 계 는 완성 되 었 고 두 번 째 단 계 는 두 개의 벡터 요소 에 대해 수학 연산 만 했다.
1 원 다항식 a0xt + a1xt - 1 +... + at - 1x + at 에 대해 서 는 [0, a1,..., at - 1, at] 로 표시 할 수 있 으 며, 그 중에서 ai 는 t 단계 1 원 다항식 중의 ax - i 항목 에 대응 합 니 다.여전히 2x2 + 1 과 5x - 1 을 입력 하면 벡터 로 2x2 + 1 을 [2, 0, 1] 로 표시 하고 5x - 1 을 [5, - 1] 로 표시 하 며 그 중에서 벡터 길 이 는 다항식 단계 에서 1 을 더 하 는 것 이 고 첫 번 째 요소 부터 마지막 요소 까지 최고 단계 에서 최저 단계 까지 대응 하 는 계 수 는 존재 하지 않 을 때 계 수 는 0 이다.이로써 문 제 는 기본적으로 명확 해 졌 다. 두 입력 의 벡터 에 대해 일부 연산 을 한 후에 출력 결과 벡터 를 하 는 것 이 아니다.
다음은 C / C + + 언어 로 일원 다항식 2x2 + 1 과 5x - 1 의 곱셈 조작 을 실현 한다.
#include
using namespace std;
#define M 3
#define N 2
#define S (M + N - 1)
int main(int argc, char* argv[])
{
int a[M] = {2, 0, 1};
int b[N] = {5, -1};
int c[S] = {0};
//
cout<
테스트 는 다음 과 같 습 니 다:
다항식 입력:
2 0 1
5 -1
출력 다항식:
10 -2 5 1
이상 은 가장 간단 한 직관 해법 일 뿐 이 고 여러 가지 등급 이 높 지만 여러 가지 계수 가 모두 0 일 때 희소 행렬 이 고 여러 가지 벡터 법의 표현 은 대량의 공간 낭 비 를 초래한다.이에 대해 선택 할 수 있 는 수 대 는 다항식 중의 한 항목 을 나타 낸다. 예 를 들 어 2x2 는 < 2, 2 > 라 고 표시 하고 각 항목 간 에 체인 구 조 를 사용 할 수 있 으 므 로 여기 서 더 이상 군말 하지 않 는 다.
사실은 일원 다항식 에 있어 그 구성 요 소 는 각 항의 계수 와 대응 하 는 단계 문제 가 아니다. 벡터 표현법 은 계 수 를 직접 저장 하고 단 계 를 벡터 인덱스 에 포함 하 며 체인 식 이 표시 하 는 각 노드 는 이 두 개의 인 자 를 직접 저장한다.구체 적 인 응용 과정 에서 일원 다항식 자체 의 상황 에 따라 적당 한 방법 을 선택해 야 한다. 낯 선 문 제 를 만 나 는 것 은 무 섭 지 않다. 무 서운 것 은 마음 을 가 라 앉 히 지 못 하고 곰 곰 이 생각 하 는 것 이다. 나 는 이 문 제 를 처음 만 났 을 때 이렇게 난처 한 상황 을 만 났 고 걸 어 나 온 후에 몇 분 동안 가만히 앉 아서 이 문 제 를 해결 했다.우리 의 적은 오직 자신 만 이 있 을 때 가 많다!