일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 |
- request body undefined
- react event bind
- body-parser
- Browser API
- redux 사용 이유
- react
- parcel
- express request body
- Event Loop
- 자료구조 queue
- server side rendering
- 순차리스트
- 자료구조 정렬
- 자료구조
- typescript parcel tilde
- javascript first class citizen
- DOM API
- first class citizen
- es6 module
- javascript eventloop
- Call stack
- client side rendering
- javascript module
- redux 특징
- 선형리스트
- centos7 설치
- web server vs was
- task queue
- parcel resolver error
- 일급 객체
- Today
- 5
- Total
- 538,105
비실이의 개발 성장기
[자료구조] 선형 리스트 - 2 본문
지난 번에 선형 리스트가 무엇인지,
선형 리스트에서의 삽입 / 삭제 방법과 특징에 대해 공부했다.
이번 포스팅에서는 다항식(polynomial) 을 선형 리스트(배열) 로 표현하는 방법에 대해 다루겠다.
선형 리스트로 다항식(polynomial) 표현
다항식(polynomial) 은 계수(coefficient) / 변수(variable) / 지수(exponent) 로 구성 된 항(term) 들의 합 이다.
항 들의 순서는 지수의 내림차순으로 정렬된다.
순서가 정해져 있으므로 선형 리스트를 활용하여 표현할 수 있다.
다음 다항식을 선형 리스트(배열) 로 표현 해 보겠다.
우선, 첫 번째 항의 지수를 통해 주어진 다항식의 최고차항을 알 수 있으며 이는 리스트의 크기가 된다.
주어진 다항식의 지수가 3이지만 마지막 항의 상수까지 생각하여 리스트(배열) 의 최대 크기는 3 + 1로 총 4가 된다.
그 다음, 각 인덱스에 항(term) 의 계수를 저장하면 된다.
프로그래밍으로 구현 시 확인해야 할 로직은
다항식은 내림차순이므로 0번 인덱스부터 최고차항의 계수를 저장해야 한다는 점과
각 항의 계수를 확인하여 값이 0인지 아닌지를 확인하는 로직이 필요하다.
위 다항식을 보면 항의 계수가 존재하지 않으므로 해당 인덱스에는 0을 저장한다.
※ 만약 0으로 표기하지 않고 그 다음 계수를 저장한다면 역 변환 시 해당 계수가 몇 번째 항인지 확인 할 수 없으며, 그 다음 항 들도 꼬이게 된다.
만약, 최고차항이 3인 다항식이 아닌 1000인 다항식이 주어졌다면
총 1001개의 공간을 가진 리스트를 만들면 된다.
하지만,
최고차항이 1000이지만 항의 갯수는 4개뿐인 다항식이 있다. (희소다항식)
즉, 1001개의 공간 중에 값이 유효한 공간은 4개이고 997개의 공간은 0으로 채워지는 비효율적인 배열이 된다.
이 경우에는 2차원 배열을 사용하면 공간을 효율적으로 활용할 수 있다.
행(row) 은 다항식의 지수를, 열(col) 은 각 항의 계수를 저장했다.
2차원 배열을 사용하여 최고차항이 1000인 희소다항식을 비효율적인 공간 없이 표현했다.
※ 다른 예제를 참고하다보면 지수를 열(col), 계수를 행(row) 에 저장하는 경우도 있는데 따로 정해져 있는 규칙은 없는 것 같다.
단, 무엇을 가리키는지 코멘트 명시 해 놓자..
* 잘못 된 내용은 댓글로 남겨주세요.
'Study memo' 카테고리의 다른 글
[자료구조] Queue (1) | 2018.06.01 |
---|---|
[자료구조] 선형 리스트 - 2 (0) | 2018.05.19 |
[자료구조] 선형 리스트 - 1 (0) | 2018.05.12 |