자바 알고리즘 과 데이터 구조 규범

5082 단어
0. 알고리즘 과 데이터 구조 프로 그래 밍 시 지 켜 야 할 일반적인 규범
  • step 1. 알고리즘 데이터 구조의 각종 상태 적 의미, 선행 조건, 사후 조건 과 부작용 배열 색인, 인용 대상 (링크 노드, 트 리 노드) 이 비어 있 으 면 안 됩 니 다
  • step 2. 주석 + 일부 코드 의 방식 으로 코드 구 조 를 그 려 서 선행 조건, 사후 조건, 부작용 (각종 상태 변수의 변화) 을 뚜렷하게 표현 한다.방법의 주요 절차 (복잡 한 방법 에 대해 모듈 화 분할)
  • step 3. 복잡 한 데이터 구조, 예 를 들 어 체인 구조 (링크, 트 리 등) 는 그림 을 통 해 각 수정 노드 의 각 상태 가 정확하게 할당 되 었 는 지 확인 할 수 있다
  • .
  • step 4. 특수 상황, 경계 상황 의 처리 에 특히 주의한다. 넘 침, 한 요소 또는 요소 가 없 는 등
  • step 5. 순환 을 정확하게 작성 하고 세 가지 요소 (초기 화, 순환 조건, 업데이트) 와 순환 불 변수의 유지
  • step 6. 재 귀 를 정확하게 작성: 시작 조건 (종료 조건), 재 귀 전후 상 태 는 변 하지 않 아야 합 니 다
  • 1. 명확 한 방법의 선행 조건, 선행 조건 과 부작용 을 정의 한다.
    1) 선행 조건 - 방법 이 실행 되 기 전에 진실 이 어야 한다.선행 조건 이 만족 하지 않 으 면 방법 을 사용 해 서 는 안 되 고 방법 이 제대로 실 행 될 것 이 라 고 기대 해 서 는 안 된다.(함수 가 그 매개 변수 에 대한 기대 와 / 또는 함수 가 사용 할 수 있 는 대상 의 상 태 를 나타 낸다.)
  • 배열 - 삭제 시 비어 있 으 면 안 됩 니 다
  • 스 택 - pop () 시 비어 있 으 면 안 됩 니 다
  • 대기 열 - 출전 시 대기 열 이 비어 있 으 면 안 됩 니 다
  • 해시 표 - removeNode 삭제 시 비어 있 으 면 안 됩 니 다
  • 배열 과 관련 된 알고리즘, 데이터 구조 - 모두 색인 범위 에 대한 검사
  • 가 필요 합 니 다.
  • 인용 유형 (이 진 트 리 노드, 붉 은 검 은 나무 노드 등) - 도 메 인 을 얻 을 때 비 공 판단
  • 을 해 야 합 니 다.
  • 배열 등 - 사용 전에 초기 화 해 야 합 니 다
  • 2) 백 엔 드 조건 - 백 엔 드 조건 은 서술 어 에서 탈퇴 하 는 기능 을 해 야 한 다 는 것 이다.이것 은 조건 을 표 현 했 습 니 다. 한 함 수 는 반환 값 과 / 또는 함수 에서 사용 할 수 있 는 대상 의 상 태 를 확보 해 야 합 니 다.
  • 배열 유형, 집합 유형 - 삭제 시 해당 하 는 위 치 를 null
  • 로 설정 해 야 합 니 다.
  • 참조 유형, 링크 구조의 노드 유형 - 삭제 시 도 메 인 참조 대상 을 null
  • 로 설정 합 니 다.
  • 배열, 집합 - add remove 시 그 상 태 를 업데이트 해 야 합 니 다. 예 를 들 어 size, count
  • 스 택 - 확장 시 head, tail 상태
  • 를 정확하게 업데이트 해 야 합 니 다.
  • 체인 해시 표 - 확장 시 오래된 표 배열 을 새 표 로 이동 할 때 오래된 표 의 대응 위 치 를 null
  • 로 설정 해 야 합 니 다.
  • 개방 식 해시 표 - 삭제, 이 위치 에 있 는 데 이 터 를 다시 삽입 해 야 합 니 다
  • BFS 의 가장 짧 은 경로 - marked [w] 업데이트 잊 지 마 세 요
  • 그림 - 테 두 리 를 추가 할 때 E + +
  • 를 잊 지 마 세 요.
    2. 상태 변 수 를 명확 하 게 정의 하고 상태 변 수 를 유지 하 는 의 미 는 변 하지 않 습 니 다.
  • 스 택 head - 스 택 꼭대기 요소 tail - 스 택 밑 요소 의 다음 을 가리 키 기 때문에 스 택 에 있 는 요소 범위 [head, tail)
  • 더미 의 명확 한 정 의 는 색인 이 1 로 시작 되 었 고 [1, size] 에 요소
  • 가 존재 합 니 다.
  • 색인 우선 대기 열 은 배열 에 색인 i 를 저장 하 는 동시에 배열 keys 를 통 해 색인 i 를 key 와 연결 시 켜 서 쌓 인 성질 의 비 교 는 key 를 통 해 이 루어 집 니 다 (i 를 통 해 대응 하 는 key 를 가 져 와 야 합 니 다. 이 수치 가 증가 하 는 과정)
  • 3. for 순환, while 순환 처리
    순환 문 3 요소:
  • 제어 변수의 초기 화, 당연히 0 partition (int left, int right) 으로 초기 화 하지 말고 순환 변 수 를 left
  • 로 초기 화 합 니 다.
  • 순환 조건
  • 순환 제어 변수의 업데이트
  • 1) 순환 각 변수의 의 미 를 특별히 정의 해 야 한다. 2) 순환 불 변수의 의 미 를 명확 하 게 정의 하고 순환 불 변수 가 순환 에서 항상 성립 되도록 해 야 한다. 특히 순환 내부 에서 배열 색인 과 관련 된 것 을 처리 할 때 범위 검사 3) 제어 변수의 정확 한 업 데 이 트 를 잊 지 말고 관련 변수의 업 데 이 트 를 빠 뜨리 지 않도록 주의해 야 한다.
  • 체인 해시 표 는 while 순환 에 대해 각 변수의 정의 와 세 가지 요 소 를 잘 알 고 size 를 업데이트 하 는 것 을 잊 지 마 세 요. 특히 중요 한 것 은 p 와 node 의 의미 입 니 다. p - (hash, key) 의 전구 결점 입 니 다. 두 가지 상황: 링크 끝 과 링크 중간 에 node - (hash, key) 결점 자체, 두 가지 상황: 링크 끝 (이때 node 는 null) 입 니 다.링크 사이
  • 더미 siftUp sift Down 과 정렬 while 순환 내 에 quue [parent] 가 있 고 순환 외 에 도 색인 right 와 left 가 있 으 며 색인 이 범 위 를 초과 하 는 지 확인 해 야 합 니 다.
  • rnd > > = 1 을 rnd > > > 1 로 잘못 써 서 순환
  • 변수 업 데 이 트 는 for () 마지막 부분 에 함부로 쓰 지 마 십시오. 빈 포인터 이상
  • 이 발생 할 수 있 습 니 다.
                for (Index prev = head; prev != null; prev = prev.down) {
                    //        for       ,      ,  prev   null,             
                    Index  right = prev.right;
    

    4. 복잡 한 방법 과 데이터 구조의 처리 방식
  • 체인 데이터 구조 에 대해 먼저 그림 을 그리고 처리 하 는 복잡 도 를 낮 추 는 링크 빨 간 검 은 나무의 left Rotate (), rightRotate () 는 xy 라 는 관 계 를 업데이트 하지 않 았 다
  • .
  • 복잡 한 조작 에 대해 먼저 생각 을 정리 하고 완전한 조작 절 차 를 작성 한 다음 에 코드 를 쓴 다음 에 최적화 합병 을 한다.
  • 붉 은 검 은 나무 null 결점 의 처리 null 결점 이 작용 합 니 다! 이 처 리 는 parentOf (), left Of (), rightOf (), colorOf ()
  • 를 참고 합 니 다.
    5. 재 귀 방법 을 정확하게 작성 한다.
    수학 귀납법 참조:
  • 1) 명제 대 자연수 N = 1 (또는 N = 0) 성립
  • 2) 명제 가 N - 1 에 성립 된다 고 가정 하면 명제 도 N 에 성립 된다
  • .
  • 3) 명 제 는 모든 자연수 에 대해 성립 된다
  • 두 가지 핵심 요소:
  • 1) 시작 조건 (종료 조건)
  • 2) 전달 관계
  • 재 귀적 호출, 상태 유지 보수 주의
        private void dfs(int v) {
            marked[v] = true;
            onStack[v] = true;
            for (int w : G.adj(v)) {
                if (hasCycle()) {
                    return;
                }
                if (!marked[w]) {
                    edgeTo[w] = v;
                    dfs(w);
                } else if (onStack[w]) {
                    cycle = new ArrayDeque<>();
                    cycle.push(w);
                    for (int u = v; u != w; u = edgeTo[u]) {
                        cycle.push(u);
                    }
                    cycle.push(w);
                }
            }
            //     ,      ,           
            onStack[v] = false;
        }
    

    6. 특수 상황, 경계 처리
  • 배열, 집합 등 - 확장 시 넘 치 는 상황 을 정확하게 처리 하고 확장 크기 가 최소 요구 보다 작 아야 하 는 등 여러 가지 상황
  • 링크 클래스 - 특수 상황 처리 (링크 가 비어 있 고 하나의 요소)
  • keys WithPrefix () 방법, prefix 자체 처리 잊 음
  • 7. 기타 세부 지식 포인트
  • 정 무한
  •  Arrays.fill(distTo, Double.POSITIVE_INFINITY);
    
  • 빈 배열
  • private static final Object[] EMPTY_ELEMENTDATA = {};
    

    좋은 웹페이지 즐겨찾기