Skip to content

Latest commit

 

History

History

list

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

리스트

목표

OCaml 에서 List 값을 효율적으로 다루면서 성능을 최적화 할 수 있어야 한다.

구현

./list [길이]를 실행하면 먼저 해당 개수만큼 정수 원소를 갖는 List 타입의 값을 생성한다. 그리고 나서 리스트의 모든 원소를 제곱하는 상황을 가정해보자. 마지막으로는, 모든 원소의 제곱 값이 새로 생성된 리스트의 같은 위치에 잘 들어 있는지 check 함수로 검사하는 코드가 이미 구현되어 있다.

OCaml에서 리스트의 원소를 추가하는 방법은 두 가지가 있다. :: 연산과 @ 연산이다. 하지만 부주의하게 사용한다면 원소 개수가 많을 때 매우 비효율적이다.

이를 해결하기 위하여, 리스트의 각 원소를 제곱하는 square_opt 함수를 효율적으로 작성하라. 이 모듈은 ./list -opt [길이]로 실행할 수 있다.

규칙

  • 순환문은 재귀 호출로 구현하고 for 문을 사용하지 않는다.
  • 천만개 원소를 생성하고 제곱하는 데 수 초를 넘지 않아야 한다. 참고로, Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz 에서 아래와 비슷한 성능이 나온다.
$ time ./list 10000000
timeout (>5 min)
$ time ./list -opt 10000000
true
./list 10000000  1.70s user 0.25s system 99% cpu 1.954 total