데이터 구조 및 알고리즘
데이터 구조 및 알고리즘 (DSA)은 컴퓨터 과학에서 가장 중요한 주제 중 하나이며 모든 CS 학생이 능숙해야하며 심지어 비 CS 학생조차도 기본적인 이해를 가져야합니다. DSA는 빵과 버터, CS의 필요성과 같다고합니다. 이 저장소는 데이터 구조 및 알고리즘을 배우고 구현하고자하는 학생들 (나 같은?)을 위해 만들어졌습니다.
C, C ++ 또는 Java가 아닌 이유는 무엇입니까?
C, C ++ 또는 Java는 메모리 할당 및 적절한 거래와 같은 코드를 작성하는 동안 많은 것을 관리해야하므로 DSA를 구현하는 데 큰 언어가 아니라고 동의하지 않습니다.
그러나 Go가 DSA를 구현하기에 좋은 언어가 될 이유는 마법이 많기 때문입니다. 작업자 과부하가 없으므로 추가 복잡성을 숨길 수있는 방법이 없습니다. 인덱스 작업은 O (1)이고 루프는 O (N) - 항상입니다. 제네릭이 없으므로 많은 추상화와 도우미가 존재하지 않으므로 실제로는 꽤 좋습니다. 알고리즘의 런타임을 크게 바꿀 수있는 게으름이나 다른 컴파일러 구동 마법은 없습니다. 그리고 Go는 슬라이스에 대한 포인터 및 저수준 프리미티브가 있습니다. 즉, 데이터가 포장되거나 데이터에 추가 간접이있을 때 분명합니다. 요컨대 : 코드에서 실제 알고리즘 실행을 명확하게 만드십시오. 이는 알고리즘을 배우는 것이 좋습니다.
결론 : GO는 또한 데이터 구조 및 알고리즘 구현을 시작하기에 좋은 언어 일 것입니다.
지침
- 시작하려면 컴퓨터에 프로그래밍 언어가 설치되어 있는지 확인하십시오. Golang 다운로드 지침에서 지침을 설치하는 방법을 따르십시오.
- 컴퓨터에 GO가 설치되면이 저장소를 복제하거나 다운로드하면됩니다.
- 이제 실행하려는 파일이있는 폴더로
cd <folder-name> . - 이제 실행
go run . .
예
graphs/directed_unweighted 디렉토리에있는 파일을 실행하려고한다고 가정 해 봅시다.
cd graphs/directed_unweighted/
go run .
폴더 이름
- 알고리즘 -
- 01KNAPSACK_DP- 동적 프로그래밍을 이용한 0-1 배낭 문제
- a_star-
- 8_puzzle- * 알고리즘을 사용한 8 퍼즐 문제
- Difrected_graph- 지시 된 그래프에 대한 A * 알고리즘
- undiprected_graph- 방향없는 그래프에 대한 * 알고리즘
- Activity_Selection_GP- 탐욕스러운 프로그래밍을 사용한 활동 선택
- Assembly_line_scheduling- 동적 프로그래밍을 사용한 어셈블리 라인 스케줄링 알고리즘
- binary_reflected_gray_codes- 이진 반사 회색 코드
- Closest_Pair_Problem-
- CPP_BRUTE_FORCE -Brute Force 기술을 사용한 가장 가까운 쌍 문제
- CPP_DIVIDE_CONQUER- Divide 및 Conquer TechInque를 사용한 가장 가까운 쌍 문제
- 조합 -
- with_r- 요소의 반복
- _r- 요소의 반복없이
- Convex_hull-
- CH_BRUTE_FORCE -BRUTE FORCE 기술을 사용한 볼록한 선체 알고리즘
- CH_DIVIDE_CONQUER- 분할 및 정복 기술을 사용한 볼록한 선체 알고리즘
- expression_conversions-
- infix_postfix- 포스트 픽스 변환으로 디스 픽스
- infix_prefix- 접두사로 변환하는 디스 픽스
- postfix_infix- 포스트 픽스에서 디스 픽스 변환
- postfix_prefix -postfix to 접두사 변환
- prefix_infix- 접두사로 디스 픽스 변환
- prefix_postfix- 포스트 픽스 변환에 대한 접두사
- GCD -Greatest Common Divisor (유클리드 알고리즘)
- 그래프 -
- Articulation_point_detection- 방향이없는 그래프에서 관절점 감지
- Bellman_ford -Bellman Ford 알고리즘
- Bridge_detection- 방향 검출/컷 에지 감지는 방향없는 그래프에서
- dijkstra -dijkstra 알고리즘
- Floyd_warshall -Floyd Warshall 알고리즘 (모든 포인트 가장 짧은 경로)
- Kruskals -Kruskal의 알고리즘 (욕심 많은 접근 방식을 사용하여 최소 스패닝 트리 MST 찾기)
- Prims- Prim의 알고리즘 (Greedy 접근법을 사용하여 최소 스패닝 트리 MST 찾기)
- 토폴로지 _sort- 토폴로지 정렬
- 트래버스 -
- CD_DIRECTED_GRAPH_TRAVERSALS- Traversals 기술을 사용한 지시 된 그래프의 사이클 감지
- CD_UNDIRECTED_GRAPH_TRAVERSALS- Traversals 기술을 사용하여 방향없는 그래프의 사이클 감지
- TSP-
- tsp_dynamic-
- Difressed_graph- TSP (여행 판매원 문제) 지시 된 그래프에 동적 접근 방식을 사용합니다.
- directed_graph -tsp (여행 세일즈맨 문제) 방향이없는 그래프에 동적 접근법을 사용합니다.
- tsp_naive-
- Difressed_graph- TSP (여행 세일즈맨 문제) 지시 된 그래프에 순진한 접근법을 사용합니다.
- directed_graph -tsp (여행 세일즈맨 문제) 결정되지 않은 그래프에 대한 순진한 접근
- Union_Find- Union Find / Disjoint Sets (방향없는 그래프에서주기 감지)
- huffman_codes- 허프만 코드 (허프만 코드 생성)
- job_scheduling_gp- 욕심 많은 프로그래밍을 사용한 작업 일정 알고리즘
- LCM- 최소한 일반적인 다중 (GCD 유클리드의 알고리즘 사용)
- LCS- 가장 긴 공통 후속
- iterative_dp- 동적 프로그래밍을 사용한 가장 긴 공통 후속 (반복 버전)
- Lo_permutations- 사전 주문 순열
- longest_palindrome_substring-
- BRUTE_FORCE- Brute Force 기술을 사용한 가장 긴 Palindrome 서브 스트링
- MANCHERS- Mancher의 알고리즘을 사용한 가장 긴 Palindrome 서브 스트링
- Making_change_dp- 동적 프로그래밍을 사용하여 변경 문제를 해결합니다
- Order_statistics- Kth 가장 작은/가장 큰 요소 찾기 (주문 통계)
- NAIVE_BERPORACH- 최대 힙을 사용한 순진한 접근 -O (k + (nk)*log (k))
- Quick_Select -Quick Select (Quick Sort) -O (n^2), θ (nlogn)
- 최악의 _case_linear_time- 최악의 선형 시간 순서 통계 -O (n)
- Power_SET- 전원 세트 (서브 세트)
- 검색 -
- binary_search- 이진 검색 - O (log n)
- interpolation_search- 보간 검색 - o (n)
- linear_search- 선형 검색 - o (n)
- Ternary_Search- Ternary Search -O (로그 3 N)
- sieve_of_eratosthenes- Eratosthenes의 체 (연속 프라임을 초과하지 않음)
- 정렬 -
- binary_insertion_sort- 이진 삽입 정렬 -O (n 2 )
- bubble_sort -bubble sort -o (n 2 )
- Bucket_Sort -Bucket Sort -O (N 2 )
- counting_sort- 카운팅 정렬 -O (n + k)
- heap_sort- 힙 정렬 -O (nlog (n)
- insertion_sort- 삽입 정렬 -O (n 2 )
- merge_sort -merge sort -o (nlog (n))
- Quick_Sort- Quick Sort -θ (nlog (n))
- radix_sort -radix sort -o (n+k)
- selection_sort- 선택 정렬 - (O (n 2 ))
- shell_sort -Shell Sort -о (N)
- String_matching-
- Boyer_Moore -Boyer Moore 알고리즘
- Horspool -Boyer Moore Horspool 알고리즘
- Knuth_morris_pratt -Knuth Morris Pratt
- Naive_pattern_matching- 순진한 패턴 일치
- Rabin_karp -Rabin Karp
- 토 - 하노이 타워
- 그래프 -
- Difrected_unweighted- 지시되지 않은 비가 중 그래프
- Difrected_weighted- 지시 가중 그래프
- diredirected_unweighted- 변환되지 않은 비가 중 그래프
- diredirected_weighted- 방향이없는 가중 그래프
- 힙 -
- max_binary_heap- 최대 바이너리 힙
- Min_Binary_Heap- 최소 바이너리 힙
- linked_lists-
- Circular_doubly_ll- 원형 이중 연결 목록
- Circular_ll- 원형 링크 목록
- doubly_ll- 이중 링크 된 목록
- pres_rev_single_ll- 단일 링크 목록에 삽입하는 동안 순서를 보존하고 단일 링크 목록을 뒤집습니다.
- Single_ll- 단일 링크 목록
- 대기열 -
- CDQUEUE- 원형 이중 종료 큐
- CQUEUE- 원형 대기열
- Dqueue- 이중 종료 큐
- Priority_queue- 최소 힙 사용과 함께 우선 큐
- Simple_Queue- 단순 대기열
- 스택 - 스택
- 나무 -
- AVL_TREE_USING_LL -BFS 및 DFS (pre, in, post) 순서 트래버스와 링크 된 목록을 사용하는 AVL 트리.
- BST_USING_ARR- BFS 및 DFS (pre, in, post)가있는 배열을 사용한 이진 검색 트리.
- BST_USING_LL- BFS 및 DFS (pre, in, post) 순서 트래버스와 링크 된 목록을 사용하는 이진 검색 트리.
- simple_bt_using_arr- BFS 및 DFS (pre, in, post) 순서 트래버스가있는 배열을 사용한 간단한 바이너리 트리.
- simple_bt_using_ll- BFS 및 DFS (pre, in, post) 순서 트래버스와 링크 된 목록을 사용하는 단순 바이너리 트리.
참고 : 포인터 ": point_left :"불완전한 구현을 나타내고 Todo 목록에 있습니다.
기부금
이 저장소는 데이터 구조 및 알고리즘을 구현하는 방법을 배우기위한 것이며, 다른 사람들의 기여는 나에게 직접 구현하는 방법을 가르쳐주지 않기 때문에 풀 요청을 받아들이지 않을 것입니다. 그러나이 repo를 포크하고 다양한 데이터 구조 및 알고리즘을 중심으로 코드를 수정하십시오. 또한, 코드를 연주하는 동안, 구현에서 특이하거나 잘못된 것을 발견하면 같은 문제를 일으키면 감사하겠습니다.
특허
이 저장소는 MIT 라이센스에 따라 릴리스됩니다. 요컨대, 이것은 개인, 오픈 소스 또는 상업 프로젝트 에서이 소프트웨어를 자유롭게 사용할 수 있음을 의미합니다. 귀속은 선택 사항이지만 감사합니다.
HAPPY CODING
HAPPY LEARNING