데이터 구조 와 알고리즘개념 및 선형 순서 표

데이터 구조 개요
  • 데이터 가 무엇 입 니까?

  • 컴퓨터 에 저장 되 고 식별 되 며 계산 할 수 있 는 것 을 모두 데이터 (바 이 너 리) 하 드 디스크 라 고 한다. MP3, jpg, doc, avi, exe, txt 메모리 에서 변수, 상수, 배열, 대상, 바이트 코드
  • 구조 가 무엇 입 니까?

  • 데이터 와 데이터 간 의 일종 또는 여러 가지 특정한 관계
  • 데이터 구조 가 무엇 입 니까?

  • 데이터 구조 = 데이터 + 데이터 간 의 관계
  • 데이터 구 조 는 주로 어떤 문 제 를 해결 합 니까?

  • 이 세계 에서 흩 어 진 데 이 터 는 연속 적 인 데이터 보다 많 습 니 다. 어떻게 흩 어 진 데 이 터 를 '정연 하고 획일 적' 으로 후속 작업 을 편리 하 게 합 니까?, 과 에서 이론 적 기초 데이터 구 조 를 제공 하 는 것 은 구체 적 인 실시 방안 (주로 이산 수학 에 의존) 이다.
  • 왜 그 랬 어 요?

  • 분 산 된 것 처럼 보 이 는 데 이 터 를 어떤 방식 으로 연결 하면 그 중에서 규칙 을 찾 을 수 있 습 니 다. 기계 학습 이라는 세 계 는 일정한 규칙 이 있 습 니 다. 어떻게 규칙 을 찾 는 지 는 모두 데이터 - 빅 데이터 에 의존 합 니 다.
  • 데이터 구조의 논리 구조
  • 데이터 요소 간 의 상호 관 계 를 말 하 는데 우리 가 상상 해 낸 것 으로 실질 적 으로 컴퓨터 에 저장 하지 않 았 다.
  • 집합 구조: 집합 구조 중의 데이터 요 소 는 같은 집합 에 속 하 는 것 을 제외 하고 그들 사이 에는 다른 관계 가 없다
  • 선형 구조: 선행 구조 중의 데이터 요소 간 은 일대일 관계
  • 트 리 구조: 트 리 구조 중의 데이터 요소 사이 에 한 쌍 의 다 차원 관계 가 존재 한다
  • 도형 구조: 도형 구조의 데이터 요 소 는 다 중 관계
  • 데이터 구조의 물리 구조
  • 데이터 의 논리 구조 가 컴퓨터 에 저장 되 는 형식 을 말한다.
  • 순서 저장 구조: 연속 적 인 공간 저장 데 이 터 를 열 면 보통 배열 로 이 루어 진다. 배열 에서 공간 자체 가 연속 적 이 고 데이터 간 의 관 계 를 확보한다
  • 체인 식 저장 구조: 무 작위 공간 저장 데 이 터 를 개발 하면 보통 노드 로 이 루어 진다. 노드 는 데 이 터 를 저장 해 야 할 뿐만 아니 라 다음 노드 의 위 치 를 저장 하여 데이터 간 의 관 계 를 확보 해 야 한다
  • .
    계산법 의 개술
  • 알고리즘 이 무엇 입 니까?

  • 특정 문 제 를 해결 하 는 절차 에 대한 설명 이다.컴퓨터 에서 명령 의 질서 있 는 서열 로 나타 나 고 모든 명령 은 하나 이상 의 조작 을 나타 낸다. 말하자면 한 문 제 를 해결 하 는 절차 가 같은 문 제 를 해결 하 는 것 이다. 여러 가지 서로 다른 해결 방안 이 있 을 수 있다. 즉, 서로 다른 알고리즘 으로 같은 문 제 를 해결 할 수 있다 는 것 이다.
  • 한 알고리즘 의 좋 고 나 쁨 을 어떻게 평가 합 니까?

  • 설계 알고리즘 은 프로그램 운행 의 효율 을 높 여야 한다. 여기 서 효율 은 대부분 알고리즘 의 집행 시간 을 가리킨다.
    사후 통계 방법:
    이런 방법 은 주로 설 계 된 프로그램 과 데 이 터 를 통 해 컴퓨터 타 이 머 를 이용 하여 서로 다른 알고리즘 프로그램의 운행 시간 을 비교 하여 알고리즘 효율 의 높 고 낮 음 을 확정 하 는 것 이다. 그러나 이렇게 하면 많은 결함 이 있 을 수 있다.
  • 프로그램 을 미리 짜 서 실행 해 야 한다. 프로그램 처리 데이터 의 양 이 많 으 면 많은 시간 과 정력 (1 년 계산 해도 문제 가 되 지 않 는 다)
  • 시간의 비 교 는 주로 컴퓨터 하드웨어 와 소프트웨어 환경
  • 에 의존한다.
  • 알고리즘 의 테스트 데이터 디자인 이 어렵 고 데이터 양 이 적 을 때 어떤 알고리즘 이 든 운행 시간 이 매우 작고 차이 가 거의 0 이다.데이터 양 이 많 으 면 알고리즘 의 우수 성 이 나 오지 만 이렇게 하면 또 시간 이 걸 릴 것 이다
  • .
    사후 분석 추산 방법:
    이러한 방법 은 주로 컴퓨터 프로그램 이 작성 되 기 전에 통계 방법 에 따라 알고리즘 기종 에 대해 고급 프로그램 언어 로 작 성 된 프로그램 이 컴퓨터 에서 실 행 될 때 소모 하 는 시간 은 다음 과 같은 요소 에 달 려 있다.
  • 알고리즘 이 사용 하 는 전략, 방법
  • 컴 파일 된 코드 품질
  • 문제 의 입력 규모
  • 기계 가 명령 을 집행 하 는 속도 첫 번 째 는 당연히 알고리즘 의 좋 고 나 쁨 의 근본 이다. 두 번 째 는 소프트웨어 가 지원 해 야 한다. 네 번 째 는 하드웨어 성능 을 봐 야 한다. 즉, 컴퓨터 하드웨어, 소프트웨어 와 관련 된 요 소 를 버 리 고 한 프로그램의 운행 서 간 은 알고리즘 의 좋 고 나 쁨 과 문제 의 입력 규모 에 의존 해 야 한다.문제 입력 규모 란 데 이 터 를 얼마나 넣 느 냐
  • 를 말한다.
  • 알고리즘 시간 복잡 도의 정의
  • 상수 단계 O (1)
  • 선형 단계 O (n) 는 상수 무시, N 의 계수 무시
  • 대수 단계 O (logn)
  • 제곱 O (n ^ 2)
  • 동적 배열
  • 자바 내장 배열 의 특징
  • 배열 의 길이 가 확정 되면 변경 할 수 없습니다
  • 배열 은 같은 유형의 데이터 만 저장 할 수 있다
  • 배열 의 모든 저장 공간 크기 가 일치 하고 주소 가 연속
  • 배열 이 각 표 지 를 제공 하 는 방식 으로 요소 에 접근 합 니 다
  • 자바 내장 배열 의 잠재 적 문제
  • 용량 이 부족 할 때 어떻게 합 니까?
  • 지정 한 위치 에 요 소 를 삽입 하거나 삭제 합 니 다. 어떻게 합 니까?
  • 배열 대상 은 length 속성 만 있 습 니 다. 사용 할 수 있 습 니까?
  • 동적 배열 의 패키지
  • 대상 을 향 한 사상 으로 배열 을 다시 포장 할 수 있 을 까?가능 합 니 다. 우 리 는 배열 의 속성 과 관련 행 위 를 클래스 에 포함 시 킬 수 있 습 니 다. 문자열 String 류 는 다음 과 같은 호출 형식 배열 대상 을 만 들 수 있 습 니 다. 정렬 ()
  • 동적 배열 을 어떻게 밀봉 합 니까
  • 속성: int size 배열 의 유효 요소 개수 int capacity 배열 의 최대 용량 data. length E [] data 데이터 의 저장 용기 행위: 증가 (), 삭제 (), 수정 (), 검사 (), 기타 ()
    선형 표 의 순서 저장 구조
  • 선형 표 의 정의
  • 0 개 이상 의 데이터 요소 의 유한 한 서열
  • 선형 표 인터페이스 List 의 정의
  • package com.oupeng.   ;
    /**
     * List         
     * @author Administrator
     *
     * @param 
     */
    public interface List<E> {
    
    	/**
    	 *            (      )
    	 * @return            
    	 */
    	public int getSize();
    	
    	/**
    	 *          
    	 * @return           
    	 */
    	public boolean isEmpty();
    	
    	/**
    	 *         index       e
    	 * @param index     0<=index
    	public void add(int index,E e);
    	
    	/**
    	 *                
    	 * @param e            size 
    	 */
    	public void addFirst(E e);
    	
    	/**
    	 *                
    	 * @param e            size 
    	 */
    	public void addLast(E e);
    	
    	/**
    	 *          Index      
    	 * @param index      
    	 * @return          
    	 */
    	public E get(int index);
    	
    	/**
    	 *            
    	 * @return	     index=0
    	 */
    	public E getFirst();
    	
    	/**
    	 *            
    	 * @return      index=size-1
    	 */
    	public E getLast();
    	
    	/**
    	 *         Index         e
    	 * @param index      
    	 * @param e	   
    	 */
    	public void set(int index,E e);
    	
    	/**
    	 *               e       
    	 * @param e           
    	 * @return	           
    	 */
    	public boolean contains(E e);
    	
    	/**
    	 *            e           
    	 * @param e	     
    	 * @return	        
    	 */
    	public int find(E e);
    	
    	/**
    	 *                    
    	 * @param index      0
    	public E remove(int index);
    	
    	/**
    	 *            
    	 * @return     
    	 */
    	public E removeFirst();
    	
    	/**
    	 *            
    	 * @return     
    	 */
    	public E removeList();
    	
    	/**
    	 *            e
    	 * @param e
    	 */
    	public void removeElement(E e);
    	
    	/**
    	 *      
    	 */
    	public void clear();
    }
    
    package com.oupeng.   ;
    
    /**
     *          List-     -   
     * @author Administrator
     *
     * @param 
     */
    public class ArrayList<E> implements List<E>{
    	
    	private static int DEFAULT_SIZE=10;	//       
    	private E[] data;	//       
    	private int size;	//          
    						//data.length          Capacity
    	public ArrayList(){
    		this(DEFAULT_SIZE);
    	}
    	/**
    	 *        capacity    
    	 * @param capacity
    	 */
    	public ArrayList(int capacity){
    		this.data=(E[]) new Object[capacity];
    		this.size=0;
    	}
    	/**
    	 *              
    	 * @param arr
    	 */
    	public ArrayList(E[] arr){
    		
    	}
    
    	@Override
    	public int getSize() {
    		// TODO Auto-generated method stub
    		return size;
    	}
    
    	@Override
    	public boolean isEmpty() {
    		
    		return size==0;
    	}
    
    	@Override
    	public void add(int index, E e) {
    		if(index<0||index>size){
    			 throw new ArrayIndexOutOfBoundsException("add      ");
    		 }
    		//      
    		if(size==data.length){
    			resize(2*data.length);
    		}
    		for (int i = size-1; i >=index; i--) {
    			data[i+1]=data[i];
    		}
    		data[index]=e;
    		size++;
    		
    	}
    	
    	/**
    	 *   data   (  ,  )
    	 * @param newlen
    	 */
    	private void resize(int  newlen){
    		E[] newData = (E[]) new Object[newlen];
    		for(int i=0; i<size;i++){
    			newData[i]=data[i];
    		}
    		data=newData;
    	}
    
    	@Override
    	public void addFirst(E e) {
    		add(0,e);
    		
    	}
    
    	
    	@Override
    	public void addLast(E e) {
    		add(size,e);
    		
    	}
    
    	@Override
    	public E get(int index) {
    		
    		 if(index<0||index>size-1){
    			 throw new ArrayIndexOutOfBoundsException("get      ");
    		 }
    		 
    		 
    		return data[index];
    	}
    	
    
    	@Override
    	public E getFirst() {
    		
    		return get(0);
    	}
    
    	
    	@Override
    	public E getLast() {
    		
    		return get(size-1);
    	}
    
    	@Override
    	public void set(int index, E e) {
    		
    		if(index<0||index>size-1){
    			 throw new ArrayIndexOutOfBoundsException("set      ");
    		 }
    		data[index]=e;
    	}
    
    	@Override
    	public boolean contains(E e) {
    		if(isEmpty()){
    			return false;
    		}
    		for(int i=0; i<size;i++){
    			if(data[i]==e){
    				return true;
    			}
    		}
    		return false;
    	}
    
    	@Override
    	public int find(E e) {
    		if(isEmpty()){
    			return -1;
    		}
    		for (int i = 0; i < size; i++) {
    			if(data[i]==e){
    				return i;
    			}
    		}
    		return 0;
    	}
    
    	@Override
    	public E remove(int index) {
    		if(index<0||index>size-1){
    			throw new ArrayIndexOutOfBoundsException("      ");
    		}
    		E e=get(index);
    		for (int i = index+1; i <=size-1; i++) {
    			data[i-1]=data[i];
    		}
    		size--;
    		//      
    		if(data.length>DEFAULT_SIZE&&size<=data.length/4){
    			resize(data.length/2);
    		}
    		return e;
    	}
    
    	@Override
    	public E removeFirst() {
    		return remove(0);
    	}
    
    	@Override
    	public E removeList() {
    		return remove(size-1);
    	}
    
    	@Override
    	public void removeElement(E e) {
    		int index = find(e);
    		if(index==-1){
    			throw new IllegalArgumentException("       ");
    		}
    		remove(index);
    	}
    
    	@Override
    	public void clear() {
    		size=0;
    		
    	}
    	
    	@Override
    	public String toString() {
    		
    		StringBuilder sb = new StringBuilder();
    		sb.append("ArrayList:size="+size+",capacity="+data.length+"
    "
    ); if(isEmpty()){ sb.append("[]"); }else{ sb.append("["); for (int i = 0; i < size; i++) { sb.append(data[i]); if(i==size-1){ sb.append(']'); }else{ sb.append(','); } } } return sb.toString(); } public int getCapacity(){ return data.length; } public void swap(int i,int j){ // i j E temp = data[i]; data[i] = data[j]; data[j] = temp; } @Override public boolean equals(Object obj) { if(obj==null){ return false; } if(obj==this){ return true; } if(obj instanceof ArrayList){ ArrayList l = (ArrayList) obj; if(getSize()==l.getSize()){ for(int i=0;i<getSize();i++){ if(get(i)!=l.get(i)){ return false; } } return true; } } return false; } }

    Leetcode 시험 문제
    1. 정수 배열 nums 와 목표 값 target 을 지정 합 니 다. 이 배열 에서 목표 값 의 두 정 수 를 찾 아 그들의 배열 아래 표 시 를 되 돌려 주 십시오.
    너 는 모든 입력 이 하나의 답안 에 만 대응 할 것 이 라 고 가정 할 수 있다.그러나 이 배열 의 같은 요 소 를 반복 적 으로 이용 해 서 는 안 된다.
    예시:
    주어진 nums = [2, 7, 11, 15], target = 9 nums [0] + nums [1] = 2 + 7 = 9 때문에 [0, 1] 로 돌아 갑 니 다.
    class Solution {
        public int[] twoSum(int[] nums, int target) {
            for(int i = 0; i< nums.length; i++){
                for(int j = i+1; j<nums.length; j++){
                    if(nums[i] == target-nums[j]){
                        return new int[]{i,j};
                    }
                }
            }
            return new int[]{-1,-1};
        }
    }
    

    사고: 주제 의 뜻 에 따라 한 번 의 배열 을 옮 겨 다 니 는 토대 에서 한 번 더 옮 겨 다 니 며 배열 의 두 값 이 주어진 값 과 같 으 면 첫 번 째 와 두 번 째 로 옮 겨 다 니 는 위 치 를 되 돌려 줍 니 다. 그렇지 않 으 면 찾 지 못 하고 [- 1, - 1] 로 돌아 갑 니 다.

    좋은 웹페이지 즐겨찾기