프로그래밍 58

[3장 재귀] 3.7 실전 응용 - 멱집합 구하는 함수

꼬리 재귀 멱집합 구하는 버젼을 공부했다. 1. powerset 함수 기본 fun Set.head() = first() fun Set.tail() = drop(1).toSet() fun powerset(s : Set ) : Set = when { s.isEmpty() -> setOf(setOf()) else -> { val head = s.head() val restSet = powerset(s.tail()) restSet + restSet.map{ setOf(head) + it}.toSet() } } 2. powerset 꼬리 재귀 버전 tailrec fun powersetTailrec(s : Set, acc : Set) : Set = when { s.isEmpty() -> acc else -> { p..

[코틀린 설치] kotlin과 kotlin-native 코드 실행

잘모르고 설치했던 코틀린이 kotlin-native라는 것을 알게 되었다. ( 왜냐면 kotlin-native에서는 import java.* 을 할수없고, BigDecimal이 없기 때문이다. import java.math.BigDecimal시 에러 발생한다. ) kotlin-native은 C/C++와 비슷하게 바이너리 파일로 컴파일해주는 것이다. kotlin은 기존 JVM과 동일하게 바이트코드로 변환해준다. kotlin-native로 컴파일하여 실행하려면 # kotlinc-native 연습문제3-17.kt -o 연습문제3-17 # ./연습문제3-17 kotlin으로 실행하려면 # kotlinc 연습문제3-19.kt -include-runtime -d hello.jar # java -jar hello.j..

[3장 재귀] 3.6 상호 재귀를 꼬리 재귀로 최적화하기

상호 꼬리 재귀 = 상호 재귀 + 꼬리 재귀 상호 재귀 : 함수A가 함수B를 호출하고, 함수B가 함수A를 호출하는 상황. (A -> B, B -> A) 예시 : odd, even 함수. odd(999) -> even(998) -> odd(997)... 이런식으로 상호꼬리재귀를 가능하게 하려면 트램펄린(trampoline)을 사용해야 한다고 한다. 스칼라나 클로저 같은 함수형 언어들은 자체적으로 트램펄린을 위한 타입과 기능을 내장하지만, 코틀린은 그러지 못한다고 한다. 그리고 free nomad(이후에 배울 것같다)로 트램펄린 자체를 하나의 타입으로 추상화한다고 한다. trampoline 함수 sealed class B data class Done1(val result : A) : B() data clas..

[3장 재귀] 3.5 꼬리 재귀로 최적화하기

코틀린으로 배우는 함수형 프로그래밍 꼬리 재귀 최적화: tailrec 을 활용 꼬리 재귀- 스택을 쌓으며 진행되는 재귀함수를 반복문으로 진행것과 같이(스택 프레임을 생성X) 컴파일러가 최적화할 수있도록 명시하는 것. 왜 사용하나? : 재귀는 호출이 반복되므로 깊이가 깊어지면 스택 오버플로우가 발생한다. 장점 : 메모이제이션 방법을 사용하지 않고도 성능향상, 스택오버플로우 방지. 조건 : 어떤함수가 직간접적으로 자기 자신을 호출하면서도 그 호출이 함수에서 마지막 연산일때!(그래서 꼬리 재귀) -> 조건부분은 예시로 보시는게 빠르다. 꼬리 재귀 사용안하는 경우 /* 연습문제 3-5 : 숫자를 두 개 입력받은 후 두 번째 숫자를 첫 번째 숫자만큼 가지고 있는 리스트를 반환하는 함수를 만들어보자. 예를 들어 r..

[패키지] pandas-profiling 아나콘다 설치 문제

Pandas Profiling :: Anaconda.org anaconda.org Kaggle 노트북에서 https://www.kaggle.com/toomuchsauce/automated-eda-a-brief-guide-5-packages 에서 Automated EDA툴 소개 중 하나로 소개된 pandas-profiling 패키지 문제이다. conda를 이용해서(아래 명령어) (anconda 링크 : https://anaconda.org/conda-forge/pandas-profiling) conda install -c conda-forge pandas-profiling 를 해서 설치를 완료하고, from pandas_profiling import ProfileReport 로 import를 진행했는데, ..

[패키지] LightGBM CUDA(GPU) 버전 설치

한줄 요약 : GPU version으로 설치가 안된다면, CUDA Version으로 설치해보자! 환경 : 리눅스(우분투 18.04.5), nvcc : 11.0, CUI 환경(서버환경), anaconda 가상환경 사용 캐글을 진행하다보니, tabular playground(초보자용 캐글)에서 lightGBM을 많이 사용하길래 해당 패키지를 아나콘다 가상환경에 설치하였다. 다만 문제는 CPU 버젼이라 GPU를 사용하지 않아서 아쉬웠다. (CPU Version은 아래와 같은 에러가 발생한다.)그래서 우분투 서버에 간신히 설치하였다. [LightGBM] [Fatal] GPU Tree Learner was not enabled in this build Please recompile with CMake option..

[프로그래머스][Python] 위장

스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothes의 모든 ..

[GIT] 초기에 GIT! 해보기

커맨드로 작업하는 일이 많이 없다고 하지만, 익숙해지기 위해서 정리해서 사용하고 있다. 최신 버젼 문서 : https://github.com/hyunW3/gitgit How to commit the git git init git config --global user.name "name" git config --global user.email "tour email" git add [something] git commit -m " [ recode the message ] git remote add origin "@hyunW3~ ... " 6-1 git remote -v local repo connect to remote repo git pull # in local git pull origin master #..

프로그래밍 2021.10.14

[OpenCV] 컴파일 에러 error while loading shared libraries: libopencv_highgui....

에러 error while loading shared libraries: libopencv_highgui.so.3.2: cannot open shared object file: No such file or directory 상황 imgview.cpp OpenCV 코드를 작성이후, g++ -o imgview imgview.cpp $(pkg-config --libs--cflags opencv) 컴파일시에는 문제 없고 ./imgview 실행시킬 떄 생긴다. 해결법 env | grep LD_LIBRARY_PATH 이 것을 통해 환경변수가 설정되어있지 않은지 확인한다. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 설정 되어있지 않으면 위의 코드를 통해 환경변수..

프로그래밍 2020.02.15
반응형