분류 전체보기 87

[알고리즘] MST(Minimum Spanning Tree, 최소신장트리) - Kruskal, Prim 구현 (C++)

더보기목차1. Greedy 알고리즘이란2. MST란3. Kruskal 알고리즘- 이론, 구현4. Prim 알고리즘- 이론, 구현1. Greedy 알고리즘이란Greedy 알고리즘이란 욕심장이 기법으로 당장 이 순간에서 최적이 되는 해를 구하는 것에, 즉 현재에 집중하는 알고리즘입니다. 과거와 미래는 전혀 신경쓰지 않습니다. Greedy 알고리즘의 핵심 단계는 다음과 같습니다.  1) Selection Procedure (선택)현재를 기준으로 가장 최적이 되는 해를 선택하는 단계입니다. 최적 해를 선택하여 집합에 추가합니다. 이 과정을 위해 선행되는 핵심은 어떤 값을 먼저 볼 것인지에 대한 우선순위 결정입니다. 2) Feasibility Check (유효성 검사)앞에서 선택한 해를 포함한 집합이 문제를 해결..

알고리즘 2024.11.25

딥러닝의 양자화 Quantization

* 아래 블로그를 보고 공부하며 작성했습니다.https://gaussian37.github.io/dl-concept-quantization/#quantization-%EC%9D%B4%EB%9E%80-1 딥러닝의 Quantization (양자화)와 Quantization Aware Traininggaussian37's bloggaussian37.github.io  양자화란 모델의 파라미터를 lower bit로 표현함으로서 계산과 메모리 access 속도를 높이는 경량화 기법이다. 실수형 변수를 정수형 변수로 변환하는데, 보통 FP32 타입을 INT8 타입 형태로 변환하는 방법을 사용한다.  Weight Quantization 5가지 전제조건Inference Only양자화는 inference에서만 사용한다...

엣지컴퓨팅 2024.11.19

[Flutter] getX를 이용해 화면 갱신하기

마이페이지 화면에서 사용자 닉네임이 표시되고, 이를 변경가능하게 구현하려고 함.이름 옆에 edit Icon을 넣고 edit Icon을 누르면 텍스트로 표시되었던 사용자 이름이 TextField로 편집가능하게 구현하고 싶음대충 이런 느낌! 톱니바퀴 아이콘을 아직 안빼서 위젯들이 좀 겹쳤지만아래와 같이 코드 구현IconButton( onPressed: () { isEditing.value = true; print(isEditing);},edit Icon을 눌렀을 때 isEditing bool 변수 값이 바뀌게 함if (isEditing.value) SizedBox( width: 150, child: TextField( controller: usernameController, ..

Flutter 2024.11.12

Llama3 한국어 요약 task 실습 (Colab)

Llama3 모델을 이용해서 기사를 요약하는 task를 수행한 후 성능을 테스트해보았다. colab 환경에서 실습한 내용은 아래 링크에서 볼 수 있다. https://colab.research.google.com/drive/1e5e0EJnuidpxwalJ3rVgcbpy2TRgJZD9?usp=sharing 아래 블로그의 코드를 따라 실습을 진행하였다.https://velog.io/@judy_choi/NLP-LLaMA3%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AC%B8%EC%9E%A5-%EC%9A%94%EC%95%BD-%EC%8B%A4%EC%8A%B5-HuggingFace LLaMA3를 이용한 문장 요약 실습 (HuggingFace 🤗)Code 라이브러리 설치 Huggin..

엣지컴퓨팅 2024.11.08

LLaMA2의 GQA 코드 살펴보기

지난 번에 공부했던 GQA(Grouped Query Attention)를 더 알아보기 위해 GQA가 적용된 LLaMA2 모델의 코드를 살펴보았다. 2024.10.07 - [엣지컴퓨팅] - [논문읽기] GQA: Training Generalized Multi-Query Transformer Models fromMulti-Head Checkpoints [논문읽기] GQA: Training Generalized Multi-Query Transformer Models fromMulti-Head CheckpointsAinslie, J., Lee-Thorp, J., de Jong, M., Zemlyanskiy, Y., Lebrón, F., & Sanghai, S. (2023). Gqa: Training genera..

엣지컴퓨팅 2024.10.30

[알고리즘] 정렬알고리즘 #6 힙 정렬 (Heap Sort)

📍 힙 정렬 (Heap Sort)힙 소트는 힙 구조를 이용해 정렬하는 알고리즘이다.힙 구조란 완전 이진 트리의 일종인 자료구조로 MaxHeap과 MinHeap이 있다. MaxHeap은 루트노드가 가진 값은 자식 노드가 가진 값보다 크거나 같다. MinHeap은 반대로 루트노드가 자식노드보다 작거나 같다. 힙 소트에서는 MaxHeap을 사용한다.1) 정렬되지 않은 배열을 힙 구조로 바꾼다. (construct heap)2) 최상위 루트 노드를 뽑아 가장 마지막 원소와 교체한다. (extract)3) 루트노드부터 마지막 원소 전까지 heap구조로 만든다. (heapify / fixheap)4) 2)로 돌아가 모든 노드를 추출할 때까지 반복한다. 📍 C++ 구현 코드class Solution {public..

알고리즘 2024.10.23

[알고리즘] 정렬알고리즘 #5 퀵 정렬 (Quick Sort) - Romuto, Hoare

📍 퀵 정렬 (Quick Sort)퀵 정렬은 빠르다고 해서 퀵 정렬이다. 먼저 퀵 소트의 기본 흐름은 아래와 같다.1) 가장 왼쪽 원소를 pivot으로 선정 (pivot 선정 방식은 바꿀 수 있음)2) 배열 내 원소들을 pivot보다 작은 것 / pivot보다 큰 것 이렇게 두 개로 분류3) 각각의 배열 내에서 다시 1)부터 반복 (recursive) 📍 C++ 구현 코드퀵소트를 구현하는 방식에는 Romuto의 방식, Hoare의 방식 두 개가 있다. 각 방식의 코드가 아래에 순서대로 있다. // Romutoclass Solution {public: void quicksort(vector& nums, int start, int end){ if(start sortArray(vector..

알고리즘 2024.10.23

[알고리즘] 정렬알고리즘 #4 합병정렬 (Merge Sort)

📍 합병정렬 (Merge Sort)합병 정렬은 Divide & Conquer (분할정복) 방식을 기반으로 한 정렬이다. 배열을 쪼개고 쪼갠 뒤 합치는(merge) 과정에서 정렬이 된다. 그래서 Merge Sort이다. 📍 C++ 구현 코드class Solution {public: void merge(vector& nums, int start, int mid, int end){ int n = nums.size(); vector tmp(n+1); for(int i=0;i& nums, int start, int end){ if(start sortArray(vector& nums) { mergesort(nums,0,nums.size()-1)..

알고리즘 2024.10.23