강의/computer science 35

[ComputerScience] c++의 map과 set

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.저번시간엔 c++의 list에 대해서 정리해보았고오늘은 map과 set 대해서 정리해보려한다  Map  map은 python의 dict와 비슷하다고 볼 수 있는데key-value가 서로 associate되어있는 구조이다 key들은 모두 unique하며각 element들은 key들의 ascending order로sort 되어있다 hash table과는 완전히 다른 구조이다  map은 내부 구조로balanced binary search tree를 갖고있다 각 node들은 Key-value pair인std::pair 오브젝트로 구현되어있다 balance tree이기 때문에tree의 차수가 ..

[ComputerScience] c++와 list

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.저번시간에는 vector에 대해 공부했고이번 시간에는 list에대해 정리해보려한다  c++의 list는 python의 List와는 다르다python의 list와 비슷한건 c++의 vector이다c++의 list는 python의 list와는 다르게non-contiguous(비연속) memory 구조이다 메모리 공간을 비연속적으로 할당받으니linked list처럼 다음 element의 위치정보를담는 pointer를 갖고있어야한다 c++의 List는이전 element와 다음 element까지2개의 포인터를 갖고있다 따라서 어느 위치에서나insertion과 deletion이 가능하지만rand..

[ComputerScience] c++의 vector

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.Container element들을 담고있는 data structure들을c++에서 지원하는데 이런 것들을 container라고 부른다보통 vector, list, map, set, deque 등등이 있다  이 게시글에서 배워볼 것은 vector vector vector는 python의 list와 비슷하다element들이 array처럼연속적인 저장소에 저장되어있으며random access가 가능하다(index로 접근 가능) 그리고 요소들의 중간에insertion과 deletion은 어렵겠지만맨 뒤에 insert와 delete하는 것은 쉽다 element들이 계속 들어와서 현재 갖고있는..

[ComputerScience] c++의 file I/O Streams와 string

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.저번시간은 c++의 입출력 시스템인std::cin과 std::cout에 대해서 배웠었다 이번 시간에는c++의 File I/O Streams에 대해 배워보자 c++의 File I/O Stream는ifstream, ofstream을 사용한다ifstream이 Input file systemofstream이 output file system이다 헤더에는 #include 을 정의해줘야사용할 수 있고standard I/O Stream과 비슷한 방식으로사용된다고한다  File Read std::ifstream file(PATH)로 파일 변수를 선언해준다이렇게 선언하면 읽어올 파일의 변수명은 fil..

[ComputerScience] c++의 I/O Streams (cin, cout)

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다. c++의 cin과 cout같은 I/O Streams는input과 output을 도와주는 프레임워크이다 실제로 컴퓨터에서 input과 Output은밑바닥에서 굉장히 복잡한 과정이 일어나는데사용자는 이를 알지못해도 입출력 기능을 사용할 수 있도록 해주는 것이다  cin  c++에서 input을 도와주는 오브젝트이다일반적으로 키보드를 이용해서 입력한다 사용자가 키보드로 입력을 해서입력한 내용을 프로그램 안으로 가지고가는 부분이다 위 ppt 그림에서 수도꼭지에서 물이 나오는 부분이cin이라고 이해하면 좋다 수도꼭지를 트는 레버(?)는cin >> input할거... 에서 >> 의 역할이다 >..

[ComputerScience] C++과 Namespace

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.C++을 처음배울 때 흔히 가장 많이 배우는 것이입력과 출력문 일 것이다#include int main(void) { std::cout  c++에서의 출력은 주로 std::cout 이런 방식으로 많이 사용하고입력을 받으려면std::cin과 같은 방식으로 많이 사용한다 cout과 cin 앞에 붙이는 이 std의 정체는대체 무엇일까 이걸 이해하려면 c++에서의namespace 개념을 이해해야한다  Namespace cin과 cout은 이미 c++ 내부에 정의되어있는 변수이다한마디로 c++을 개발하면서 이미 입력과 출력 기능을사용할 수 있도록 predefined 해놓은 변수라는 뜻이다..

[ComputerScience] 알고리즘의 시간복잡도와 탐색, 정렬 (Binary Search, 깊이우선탐색, 넓이우선탐색, Selection Sort, QuickSort, Merge Sort)

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.Time Complexity 알고리즘의 성능을 측정할 때는 흔히time complexity(시간 복잡도)와 space complexity(공간 복잡도)로측정을 많이 한다 이 중에서 이번에 알아볼 것은 시간복잡도보통 흔히 우리들이 아는 알고리즘의 성능을 평가할 때 자주 사용된다 단순하게 어떤 알고리즘의 시간 복잡도를 측정하려면어떤 방법이 있을까? 첫 번째는 실제로 알고리즘을 돌려서시작 시점과 종료된 시점의 시각을 구해그 차이를 구하는 방법이다 이러한 방법의 차이는 real-world performance를 측정할 수 있다즉, 실제로 알고리즘이 사용될 때 어느정도의 시간이 걸리는지를측정할..

[ComputerScience] 자료구조 Tree와 Graph (Rooted Binary Tree, Binary Search Tree, Graph)

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.Tree란? 자료구조 중에서 Tree(트리)라는 친구가 있다단순하게 말하면 트리는 서로 연결되어있는노드들의 집합인데노드와 노드 사이에는 반드시 한 개의 길만 존재해야한다 따라서 위 그림에서 Tree로 분류할 수 있는 것은1번, 3번, 4번이라고 할 수 있다 이런 형태의 자료구조를 트리라고 부른 이유는자료구조의 형태가 나무를 거꾸로 한 형태를 닮았기 때문인데가장 출발점이 되는 노드를 root(뿌리)로 부르고길을 통해 퍼져나가는 노드들의 모양이 leaf(잎)의형태를 닮았기 때문이다  Rooted Binary Tree Rooted Binary Tree는Binary라는 뜻에서 유추할 수 있듯..

[computerScience] Array, Linked List, Queue, Stack, Hash Table

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.Array와 Linked List 비교 array와 linked list의 구조array는 우리가 흔히 알고있는[1, 2, 3, 4, 5]같은 자료구조이다.  위에서 보이듯이 array는 연속된 공간을 할당받고그래서 실제로 1과 2가 저장된 공간도물리적으로 연속되어 있다.  linked list는 영어 그대로데이터들이 서로 연결되어있는 list라고생각하면 편하다 Linked list에 1, 2, 3, 4, 5가 있다고 하면각 1, 2, 3, 4, 5가 메모리 어디에 저장되어있는지는 모르지만1과 2가 연결되어있고1이라는 데이터와 함께 2가 저장된 메모리의 주소를함께 저장하기 때문에1에 ..

[ComputerScience] C언어와 포인터

이 게시글은서울대학교 데이터사이언스대학원조요한 교수님의데이터사이언스 응용을 위한 컴퓨팅 강의를학습을 위해 재구성하였습니다.pointer는 C언어의 꽃이라고도 불린다어렵고 복잡하지만 그만큼 중요하고 반드시 필요한 부분이기때문에C언어 혹은 컴퓨터과학을 공부한다면반드시 완벽하게 이해하고 넘어가야한다 그래서 강의에서 들은 Pointer에 대해서정리해보도록 하겠당 Pointer란?포인터란 어떤 변수의 메모리 주소를 담고있는 변수이다말그대로 int, string같은 변수인데그 데이터 타입이 메모리 주소인 것이다  *;앞의 type이 메모리 주소에 담겨있는 변수의 데이터 타입은 포인터 변수의 이름이다 int *ptr;이렇게 정의를 한다면ptr은 어떤 int 값의 메모리 주소를 담고있는포인터 변수라는 뜻이다 char ..