나의 큰 O는 log x야

고정 헤더 영역

글 제목

메뉴 레이어

나의 큰 O는 log x야

메뉴 리스트

  • 홈
  • Tag
  • Guestbook
  • Admin
  • 분류 전체보기
    • 적분史
    • 프로그래밍
      • PG어
      • 테크닉
      • 3D
      • Multi precision
      • 포니게임개발
      • 스페샬
      • NLP
    • 소리
    • 언어
      • 어원 이야기
      • 라틴어
    • 수업노트
      • 한국고대경제와사회
      • 영어구조론
      • 정보검색론
      • 인간의삶과역사속의미생물
      • 기타
    • 잉여
      • 미래
      • 수학
      • 종교개혁
    • 그냥 공부
    • 가짜 정보 정정합니다.

검색 레이어

나의 큰 O는 log x야

검색 영역

컨텐츠 검색

프로그래밍/테크닉

  • [C++11] 인덱스 정보를 유지하면서 효율적으로 정렬하기

    2022.05.30 by ∫2tdt=t²+c

  • 이진 탐색은 어디까지 빨라질 수 있을까?

    2022.01.15 by ∫2tdt=t²+c

  • [C++11] 멤버 함수 포인터를 일반 함수 포인터로 바꾸기

    2021.08.08 by ∫2tdt=t²+c

  • [c언어] 수열의 부분 합(Prefix Sum) 구하기 - 어떤 방법이 더 빠르고 정확할까

    2020.07.12 by ∫2tdt=t²+c

  • [C++ 11] 문자가 특정 문자 집합에 속하는지 우아하게 테스트하기

    2020.03.30 by ∫2tdt=t²+c

  • [C++] 빠른 generate_canonical 함수 만들기

    2019.12.25 by ∫2tdt=t²+c

  • [C++, Eigen] Eigen cast함수 SIMD로 벡터화하기

    2019.10.13 by ∫2tdt=t²+c

  • [C++] 템플릿을 이용해서 읽기 쉬운 타입 이름을 얻어보자

    2019.09.29 by ∫2tdt=t²+c

[C++11] 인덱스 정보를 유지하면서 효율적으로 정렬하기

정렬은 컴퓨터 알고리즘에서 매우 자주 쓰이는 중요한 알고리즘입니다. 그래서 대부분의 프로그래밍 언어들은 정렬하는 방법을 언어 문법 차원에서든 기본 라이브러리로든 반드시 제공합니다. 언어 차원에서 제공해주는 정렬 함수는 대체로 최적화가 잘 되어 있어 빠르므로, 컴공 과제를 푸는게 아닌 이상은 정렬을 직접 구현해서 쓸 일은 거의 없지요. 그러나 종종 기본적으로 제공되는 정렬 함수만으로는 부족함을 느낄 때가 있습니다. 바로 인덱스 정보를 유지하면서 정렬을 해야하는 경우입니다. 위의 그림에서와 같이 총 5개의 문자열로 이뤄진 배열을 정렬하는데, 정렬 후 배열의 각 요소들이 원래 어느 위치에 있었는지를 함께 파악해야하는 경우가 있습니다. 배열과 관련된 다양한 문제를 해결하다보면 생각보다 자주 필요한 작업인데요, ..

프로그래밍/테크닉 2022. 5. 30. 01:01

이진 탐색은 어디까지 빨라질 수 있을까?

수 많은 값들 속에서 특정 값의 위치를 찾는건 컴퓨터가 수행하는 작업들 중 가장 기본적인 작업이면서도 자주 쓰이는 작업입니다. 특정 이름으로 된 파일을 열거나, 주소를 이용해 특정 사이트에 접속하거나, 검색엔진에 검색어를 입력해 원하는 결과를 찾는 일 등 수많은 작업들이 결국에는 데이터의 위치를 찾는 작업으로 귀결되지요. 그래서 컴퓨터 과학에서는 이런 종류의 작업에 '검색 알고리즘(Search Algorithm)'이라는 이름을 붙여서 심도 있게 연구하고 있습니다. 이번 포스팅에서 다룰 내용은 값 집합이 고정되어 있는 상태에서 특정 값이 해당 집합 내에 존재하는지, 존재하면 어느 위치에 존재하는지를 찾는 것입니다. 따라서 값 집합에 새로운 값이 추가되거나 값 집합에서 특정 값이 제거되는 등 값 집합 자체가..

프로그래밍/테크닉 2022. 1. 15. 15:15

[C++11] 멤버 함수 포인터를 일반 함수 포인터로 바꾸기

C++로 개발을 하다보면 종종 C API를 호출해야하는 경우가 있습니다. 많은 유용한 라이브러리나 OS 등이 C API만 제공하고 C++스타일 API를 제공하지 않기 때문인데요, C++ 철학에 맞춰 코드를 짜다가도 이렇게 C API를 호출하려하다보면 코드가 쉽게 지저분해지곤 합니다. C스타일로 작업하면 특히 지저분해지기 쉬운게 자원 획득 & 해제와 콜백 함수 넘기는 작업입니다. 이 중 자원 획득 & 해제는 unique_ptr나 shared_ptr의 custom deleter를 이용하면 어느정도 깔끔하게 처리할 수 있으니, 이번 포스팅에서는 콜백함수를 넘기는 작업에 대해 고민해보려고 합니다. C에서의 콜백함수 콜백함수(Callback)는 나중에 호출하라고 넘겨주는 함수를 가리킵니다. 보통 다음과 같은 형태..

프로그래밍/테크닉 2021. 8. 8. 17:39

[c언어] 수열의 부분 합(Prefix Sum) 구하기 - 어떤 방법이 더 빠르고 정확할까

수열의 부분합 구하기! 중고등학교 수학시간에 많이 했던 일이죠. 어떤 수열 X가 a, b, c, d ... 와 같은 식으로 있다면 부분합(Prefix Sum, 혹은 Scan) S는 다음과 같이 계산됩니다.S1: a S2: a + b S3: a + b + c S4: a + b + c + d수학시간에서는 이 부분합 수열의 일반항을 구하는 일을 주로 했지만, 컴퓨터 과학에서는 이 수열의 각 항을 빠르고 효율적으로 (또 정확히) 계산하는 방법에 대해 논하게 됩니다. 이 부분합을 구해서 어디에 쓰나 싶지만, 의외로 여러 분야에서 널리 쓰이고 있습니다. 대표적인 사례로 누적분포(cumulative distribution)을 구하는 작업이 있겠습니다. 이는 특정 임의 분포에서 표본을 추출하는데 자주 사용됩니다. 예를..

프로그래밍/테크닉 2020. 7. 12. 19:01

[C++ 11] 문자가 특정 문자 집합에 속하는지 우아하게 테스트하기

고전적 방법으로 문자 집합 소속 여부 테스트하기문자열 처리를 하다보면 빠질수 없는 작업이 어떤 문자가 특정 문자 집합에 속하는지 확인하는 것일 겁니다. 예를 들어 'b'가 A~F 범위에 속하는지, '간'이 가~깋 범위에 속하는지 비교하는 것처럼요. 일반적으로 이 작업은 if문을 몇번 써서 수행할 수 있습니다. 예를 들어 특정 문자가 A-F 범위에 속하는지를 확인하는 함수는 다음과 같이 작성할 수 있지요.bool is_in_a_f(int c) { return 'A'

프로그래밍/테크닉 2020. 3. 30. 02:02

[C++] 빠른 generate_canonical 함수 만들기

C++11 표준에서부터 랜덤 함수와 관련된 여러 라이브러리들이 추가되었는데요, 그 중 랜덤한 실수를 생성하기 위한 제일 기초적인 함수로 std::generate_canonical이 있습니다. 이 함수는 임의 부동소수점 타입의 수를 [0, 1) 범위 (0~1인데 0은 포함하고 1은 포함하지 않음)에서 임의로 생성합니다. 또한 이 때 생성할 난수의 최소 랜덤 비트를 템플릿 인자로 설정할 수 있게 되어있습니다. 이 함수는 제일 기본적인 실수 난수를 생성하므로, 이보다 더 복잡한 실수 난수들(정규 분포에서 뽑기, 베타, 감마 분포에서 뽑기 등)은 이 함수의 결과값을 바탕으로 사용합니다. 즉 랜덤 실수 생성의 기본 중의 기본이라 할 수 있습니다. 또한 깁스 샘플링과 같이 확률적 샘플링을 사용하는 프로그램을 짜게 ..

프로그래밍/테크닉 2019. 12. 25. 14:35

[C++, Eigen] Eigen cast함수 SIMD로 벡터화하기

Eigen은 C++기반의 선형 대수 연산 라이브러리입니다. 이 라이브러리의 특징은 c++의 템플릿을 쥐어짜서 컴파일 시간에 행렬 간의 연산식을 분석하고 최적의 연산 순서를 결정해서 연산을 수행한다는 것입니다. 예를 들어 Eigen::MatrixXf a, b, c, d; a = b * c + d; 와 같은 식이 있다면, 일반적인 c++객체에서는 b*c를 연산한 뒤 그 리턴값으로 임시 객체가 생성이 되고, 이 임시객체와 d를 더한뒤 임시 객체를 생성하고, 최종적으로 이 임시객체가 a에 대입되는 식으로 연산이 진행될 겁니다. 하지만 Eigen에서는 Expression Template이라는 템플릿의 응용기법을 이용해 이런 불필요한 연산을 회피하고, b*c를 바로 a에 대입한뒤 거기에 d를 더 더해서 임시객체 생..

프로그래밍/테크닉 2019. 10. 13. 01:35

[C++] 템플릿을 이용해서 읽기 쉬운 타입 이름을 얻어보자

C++에는 런타임 타입 정보(RTTI)를 알려주는 typeid 시스템이 들어가 있습니다. 따라서 컴파일 언어이면서도 생각보다는 유연하게 실행 시간에 특정 변수의 타입을 조회하고 타입 간의 연산을 수행할 수가 있습니다. typeid로 얻어지는 type_info 인스턴스는 name()이라는 멤버 함수를 가지는데, 이 멤버 함수는 해당 타입의 이름을 알려줍니다. 이 값을 통해 현재 변수의 타입이 무엇인지 유저에게 문자열로 출력해줄 수가 있는 것이죠.문제는 이 name()이 사실 사람이 읽기에 적합한 문자열을 주지 않는다는 것입니다. (게다가 컴파일 환경에 따라 출력값이 달라질 수도 있구요.) 예로 gcc 8.3에서 typeid(std::vector).name()는 St6vectorImSaImEE라는 값을 반환..

프로그래밍/테크닉 2019. 9. 29. 19:10

추가 정보

인기글

최신글

글쓴이 ∫2tdt=t²+c

블로그 이미지

제가 안 것의 대부분은 인터넷으로부터 왔으니, 다시 인터넷에게 돌려주어야 합니다. bab2min@gmail.com

댓글

태그

포니게임 리듬게임 라틴어 BigFloat 문헌정보통계 우리역사바로알기대회 python pg어 c++ 한국고대경제와사회 php Direct3D 영어구조론 정보조직론 NLP kiwi 자연언어처리 악보 토픽 모델링 텍스트 마이닝

방문자

오늘
어제
전체

페이징

이전
1 2 3 4
다음
나의 큰 O는 log x야
메일 bab2min@gmail.com
Skin Images are from Stinkehund.

티스토리툴바