마인드 맵 갤러리 프로그래머가 면접 시 마스터해야 할 8가지 데이터 구조
프로그래머가 인터뷰에서 마스터해야 하는 8가지 데이터 구조(예: 대기열: 선형 데이터 구조를 저장하는 FIFO 선입선출 순서, 슈퍼마켓 결제 등)가 가능한지 확인하세요.
2023-10-11 09:57:06에 편집됨이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
데이터 구조
자주 테스트되지 않는 그래프
정의
네트워크 형태로 서로 연결된 노드
용어
정점: 노드
가장자리: 가장자리, 한 쌍의 노드
무게/비용
유형
유향 그래프
무방향 그래프
표현
인접 행렬
인접 목록
순회 알고리즘
너비 우선 검색 DFS
깊이 우선 검색 TFS
면접 관련
폭과 깊이 우선 검색 구현
그래프가 트리인지 확인
그래프의 간선 수 계산
두 꼭지점 사이의 최단 거리 찾기
모노톤 스택 모노톤 스택은 거의 테스트되지 않습니다.
이중 종료 큐 Deque, 거의 테스트되지 않음
Union Find는 거의 테스트되지 않습니다.
선분 트리는 거의 테스트되지 않습니다.
트리 배열 이진 인덱스 트리(BIT), 거의 테스트되지 않음
사전 트리 Trie, 거의 테스트되지 않음
정의
라고도 함: 접두사 트리, 특별한 트리형 데이터 구조
사용
문자열 관련 문제를 해결하는 데 매우 효과적입니다.
빠른 검색 제공
사전에서 단어 검색
검색 엔진의 자동 제안
IP 라우팅
회견
사전 트리의 총 단어 수를 계산합니다.
사전 트리에 저장된 모든 단어를 인쇄합니다.
사전 트리를 사용하여 배열의 요소 정렬
사전 트리를 사용하여 사전에서 단어 만들기
T9 사전 구축: 사전 트리 DFS
해시 테이블/해시 맵 해시 테이블, 자주 테스트됨
정의
키-값 쌍의 형태로 고유하게 식별된 객체를 저장합니다.
사전: 키-값 쌍의 모음
키키를 이용하여 객체값 검색
Java의 HashSet/HashMap, C의 unordered_map, Python의 dict
지원되는 작업: O(1) 삽입 / O(1) 찾기 / O(1) 삭제
해시 테이블 작동 방식
<br>작동 원리: 세트용. 키는 해시 함수를 통해 인덱스를 얻은 다음 그 값을 배열에 저장합니다. <br>Get의 경우 키와 해시 함수를 통해 인덱스를 찾아 값을 가져옵니다.
해시에 대한 다양한 작업의 시간 복잡도를 단순히 O(1)로 간주할 수 없는 이유는 무엇입니까?
키는 문자열, 정수 또는 알 수 없는 길이의 것일 수 있습니다. 따라서 엄격한 의미에서 O(L)을 사용하는 것이 적절합니다. 모든 작업의 시간 복잡도는 O(1)이 아닌 O(keySize)입니다.
해시 함수를 구현하는 방법
128 해시 함수
해시 충돌(Collision)을 해결하는 방법
충돌이란 해시 함수로 계산한 후 두 개의 서로 다른 키가 두 개의 동일한 값을 얻는 것을 의미합니다. 충돌을 해결하는 두 가지 주요 방법은 다음과 같습니다.<br>오픈 해싱. 이는 해시 테이블의 기반이 되는 배열에서 각 위치가 연결 목록의 헤드 노드임을 의미합니다. 이러한 방식으로 충돌하는 <key, value> 튜플은 동일한 연결 목록에 배치됩니다. <br>폐쇄형 해싱. 충돌이 발생하면 후속 요소가 빈 공간을 찾기 위해 다음 위치로 이동한다는 의미입니다.<br>
해시 테이블을 지속적으로 확장하는 방법은 무엇입니까?
129 재해시
성능 요인
해시 함수
해시 테이블 크기
충돌 처리 방법
회견
배열에서 대칭 키-값 쌍 찾기
문제 해결을 위해 해시 테이블을 유연하게 사용할 것인가?
해시 테이블의 기본 원리에 능숙합니까?
편의를 위해 전체 경로를 추적하세요.
배열이 다른 배열의 하위 집합인지 확인
주어진 배열이 분리되어 있는지 확인합니다.
526. 로드 밸런서<br>
134. LRU 캐시 전략<br>657. 삽입 삭제 GetRandom O(1)<br>954. 삽입 삭제 GetRandom O(1) - 중복 허용<br>209.
데이터 스트림 클래스 문제<br>960. 스트림 II의 첫 번째 고유 번호<br>105. 순서가 잘못된 문자열을 사용하여 연결 목록 복사<br> 124. 가장 긴 연속 시퀀스
검색 정렬
종류
삽입 정렬
빠른 정렬
선택 정렬
병합 정렬
기수 정렬
힙 정렬
찾다
정적 조회 테이블
동적 조회 테이블
해시 테이블
데이터 구조 정의: 데이터 구조는 데이터 저장소 컬렉션과 이 컬렉션에 정의된 여러 작업(함수)으로 생각할 수 있습니다.
테스트 방법 1: 특정 데이터 구조의 기본 원리를 질문하고 구현을 요청합니다.
예: Hash의 원리에 대해 이야기하고 Hash 테이블을 구현합니다.
테스트 방법 2: 일종의 데이터 구조를 사용하여 작업 완료
예: K개의 순서 배열 병합
테스트 방법 3: 일부 특정 기능을 제공하기 위한 데이터 구조 구현
예: 가장 높은 빈도의 K 항목 문제
시간 복잡도:
다중 인터페이스의 시간 복잡도 설명<br>
예를 들어 Set 데이터 구조를 설계해야 합니다.
알고리즘 1:O(n) lowerBound O(1) 추가
구현 방법: 배열 저장소를 사용하고, 매번 비교하고, 배열 끝에 직접 삽입합니다.
알고리즘 2:O(logn) lowerBound O(logn) add
구현 방법: Red-black Tree 저장소 사용, Java에서는 TreeSet, C에서는 매핑
배열 배열, 가장 일반적으로 테스트됨
유형
1차원 배열
2차원 배열
다차원 배열
하위 배열
배열의 일부
인터뷰 질문들
41. 42,43, 최대 하위 배열<br>44. 최소 하위 배열<br>138.
배열 간격 문제
인터뷰 질문들
30. 범위 삽입<br>793. 여러 배열의 교차<br>156.
외부 정렬 문제
정의: 외부 정렬 알고리즘은 메모리가 부족할 때 하나 이상의 대용량 파일에 저장된 데이터를 정렬하는 알고리즘을 말합니다. <br>
두 가지 기본 단계:<br>대형 파일을 여러 개의 작은 파일로 자르고 메모리를 사용하여 각각 정렬<br>K-way 병합 알고리즘(k-way 병합)을 사용하여 여러 개의 작은 파일을 정렬하여 하나의 큰 파일로 병합
인터뷰 질문들
486. K 정렬된 배열 병합<br>104.
비트 연산
정의: 이진 비트에 대한 연산
인터뷰 질문들
365. 이진수에는 1이 몇 개 있나요<br>
트리 배열은 거의 고려되지 않습니다.
라고도 함: Fenwick Tree 영어 이름: Binary Indexed Tree 약어: BIT는 접두사와 정보를 기반으로 구현됩니다.<br>
이름은 Tree인데 배열(Array)에 저장됩니다.<br>BIT는 다중트리이고, 부모-자식 관계는 포함관계를 나타냅니다.<br>getPrefixSum(k)을 사용하여 getRangeSum(x, y)을 구현합니다. )
시간 복잡도
Log(n) 임의 위치의 값 수정<br>Log(n) 임의 간격의 합 조회
특징
N개의 숫자로 구성된 배열의 경우 다음 함수가 지원됩니다.<br>update(index, val) //logN 시간 내에 배열의 한 위치에 있는 값을 업데이트합니다. getPrefixSum(k) //log(K) 시간 내에 가져옵니다. 배열의 처음 K개 숫자의 합
인터뷰 질문들
817. 범위 행렬 요소 sum-variable<br>249. 자신보다 작은 이전 숫자의 수를 계산합니다.
작동하다
증가하다
삭제 삭제
삽입 삽입,
크기크기
면접 관련
배열에서 두 번째로 작은 요소 찾기
반복되지 않는 첫 번째 정수 찾기
배열의 양수 및 음수 값 재정렬
65. 두 개의 정렬된 배열의 중앙값, 어려운 문제<br>
6. 정렬된 배열 병합<br>64. 두 개의 정렬된 간격 목록 병합<br>486. K 정렬된 간격 목록 병합<br>547. 두 배열<br>548. 두 배열의 교차점<br>793. 다중 배열의 교차점<br>654. K 정렬 배열의 중앙값<br>149. 시간<br>405. 합계가 0인 하위 행렬<br>943. 범위 합계 쿼리 - 불변<br>665. 변수 범위 합계
스택 스택, 자주 테스트되지 않음
정의
LIFO. 예를 들어, 물류 적재에서는 나중에 적재된 물품이 먼저 하역됩니다.
지원되는 작업: O(1) 푸시 / O(1) 팝 / O(1) 상단
애플리케이션
이진 트리의 비재귀 순회, 역 폴란드식 계산 등에 사용됩니다.
DFS의 비재귀적 구현의 주요 데이터 구조
너비우선탐색(BFS)에서는 확장할 노드를 기록합니다.
대기열은 비동기 작업을 완료하기 위해 메시지 대기열을 구현하는 데 사용될 수 있습니다.
메시지 생성 및 소비 속도가 일관되지 않은 경우 전송되었지만 수신되지 않은 메시지를 임시로 저장하기 위해 메시지 큐가 필요합니다.
스택 모드 구현
저장 구조(일반적으로 사용되는 배열, 때때로 연결 목록)를 사용하여 요소를 저장합니다.
하나의 배열을 사용하여 세 개의 스택을 구현하시겠습니까?
두 개의 대기열을 사용하여 스택을 구현하시겠습니까? <br>
차이점
어레이는 임의 액세스에 대해 더 나은 성능을 제공합니다. <br>연결된 목록은 요소 삽입 및 삭제 성능이 향상되었습니다.
연습<br>
lintcode: 495. 스택 구현
494. 이중 대기열 구현 스택<br>
224. 배열을 사용하여 세 개의 스택 구현<br>
작동하다
푸시, 상단에 요소 삽입
pop은 스택의 최상위 요소를 반환하고 제거합니다.
isEmpty스택이 비어 있고 true를 반환합니다.
top은 최상위 요소를 제거하지 않고 반환합니다.
Java는 Vector 클래스에서 확장되고 push(), pop(), peek(),empty() 및 search()와 같은 작업을 지원하는 java.util.Stack을 사용합니다.
C에서는 <stack>의 스택을 사용하면 됩니다. C의 peek()가 top()으로 호출된다는 점과 pop()의 경우 반환 값이 비어 있다는 점을 제외하면 메소드는 Java와 유사합니다.
Python, 목록을 직접 사용하고, [-1]과 같은 슬라이싱 작업을 사용하여 스택 상단을 보고, 스택 상단을 팝할 때 list.pop()을 사용하고, 스택 상단을 푸시할 때 list.append()를 사용합니다. . <br>
면접 관련
스택을 사용하여 후위 표현식 평가
스택의 요소 정렬
식이 괄호 균형을 이루고 있는지 확인
QueueQueue, 자주 테스트됨
정의
FIFO 선입선출 순차 저장 선형 데이터 구조, 슈퍼마켓 체크아웃
지원되는 작업: O(1) 푸시 / O(1) 팝 / O(1) 상단
애플리케이션
BFS 알고리즘의 주요 데이터 구조로 사용됩니다.
작동하다
대기열에 넣기 대기열 끝에 요소 삽입
dequeue는 큐의 헤드 요소를 제거합니다.
isEmpty 열이 비어 있고 true를 반환합니다.
top은 대기열의 첫 번째 요소를 반환합니다.
실현 방법
연결리스트를 사용하여 큐를 구현하시겠습니까?
두 개의 스택으로 큐를 구현하시겠습니까? <br>
원형 배열을 사용하여 대기열을 구현하시겠습니까?
연습: 955. 원형 배열로 대기열 구현<br>
회견
큐를 사용하여 스택을 표현
대기열의 처음 k개 요소를 반전합니다.
큐를 사용하여 1부터 n까지 이진수 생성
642. 데이터 스트림의 이동 평균<br>
955. 원형 배열로 큐 구현<br>
자주 테스트되는 연결 목록
정의
노드 체인: 각 노드에는 후속 노드에 대한 데이터와 포인터가 포함됩니다.
사용
파일 시스템, 해시 테이블, 인접 목록 구현
유형
단방향 연결리스트
이중 연결 리스트
작동하다
insertAtEnd
insertAtHead
삭제
머리에서 삭제
찾다
isEmpty, 비어 있음, true를 반환합니다.
회견
역방향 연결리스트
연결리스트의 순환 감지
연결된 목록의 마지막 노드에서 n번째 노드를 반환합니다.
연결리스트에서 중복된 항목 제거
나무나무
정의
계층적 데이터 구조
정점과 모서리로 구성
그래프에 표시된 것처럼 트리에는 사이클이 없습니다.
용어
루트 루트 노드
상위 상위 노드
자식 자식 노드
리프 노드
형제 노드
유형
N-ary 트리
선분 트리는 기본적으로 테스트되지 않았으며 보편적입니다.
자주 테스트되는 이진 트리
이진 검색 트리
정의: 왼쪽 하위 트리는 루트 노드보다 작고, 루트 노드는 오른쪽 하위 트리보다 작습니다. 효과는 다음과 같습니다. 왼쪽이 항상 오른쪽보다 작습니다.
균형 이진 트리
균형 트리(AVL 트리)
정의:
빈 트리이거나 왼쪽 및 오른쪽 하위 트리 사이의 높이 차이의 절대값이 1을 초과하지 않고 왼쪽 및 오른쪽 하위 트리가 모두 균형 이진 트리입니다.
구현
레드 블랙 트리, AVL, 희생양 트리, Treap, 퍼짐 트리
더미
정의: 힙은 균형 잡힌 이진 트리입니다. 부모 노드는 자식 노드보다 작습니다. 왼쪽 자식 노드와 오른쪽 자식 노드 사이에는 크기 관계가 없습니다. 배열을 사용하여 구현 가능<br>
지원되는 작업: O(log N) 추가 / O(log N) 제거 / O(1) 최소 또는 최대
최대 힙과 최소 힙
값 특성: 최소 힙의 경우 상위 노드가 하위 노드보다 작고 최대 유형 힙의 경우 왼쪽과 오른쪽 하위 노드 사이에 크기 관계가 없으며 상위 노드가 하위 노드보다 큽니다. 왼쪽 및 오른쪽 하위 노드 사이에는 크기 관계가 없습니다.
구조적 특성: 높이가 logN인 이진 트리입니다.
시간 복잡도: 삭제 및 팝 복잡도는 모두 logN, 최소 또는 최대 복잡도 찾기 O(1)<br>
삽입 방법: 균형 잡힌 이진 트리를 보장하면서 항상 왼쪽부터 삽입합니다. 삽입된 수가 작은 경우 위로 이동하고 상위 노드는 아래로 이동합니다. 따라서 최대 복잡도는 logN입니다.<br>
삭제 방법은 다음과 같습니다.
구현 방법: 연습: lintcode 130 heapify<br>
면접 연습 문제
104. K 정렬 목록 병합<br>612. K개의 가장 가까운 포인트<br>613. 우수한 결과<br>K 정렬 배열<br>81. 숫자<br>544. 상위 K개 큰 숫자<br>401. 정렬 행렬에서 작은 숫자부터 큰 숫자까지입니다.
세그먼트 트리<br>
정의: 선분 트리는 고급 데이터 구조이자 트리 구조, 정확하게 말하면 이진 트리입니다. 간격 수정 쿼리와 같은 문제를 효율적으로 처리할 수 있습니다. <br>
참고: 기본적으로 테스트되지는 않았지만 마스터할 수 있다면 많은 문제를 한 번에 해결할 수 있습니다. 선분 트리는 분할 정복 방법을 기반으로 구현되었으며 분할에 대한 모범 사례로 사용할 수 있습니다. 그리고 정복방법.
회견
이진 트리의 높이 찾기
이진 검색 트리에서 k번째 최대값 찾기
루트 노드로부터 거리 k인 노드 찾기
이진 트리에서 주어진 노드의 조상 노드 찾기
104. K 정렬 목록 병합<br>
3가지 방법
방법 1: PriorityQueue 사용
방법 2: 병합 정렬과 유사한 분할 및 정복 알고리즘
방법 3: 상향식 쌍 병합 알고리즘
시간 복잡도는 O(NlogK)입니다.
결합: Jiuzhang 알고리즘
연습문제는 모두 린트코드 문제입니다