기본 콘텐츠로 건너뛰기

[알고리즘]그래프를 알아보자

알고리즘 스터디 중 DFS를 공부하다 그래프에 대해 제대로 된 개념이 탑재된것 같지 않아 블로그를 남겨 보려 한다.

그래프
1. 용어
  - 그래프는 정점(Vertex)과 간선(Edge)의 집합으로 하나의 간선은 두 개의 정점을 연결한다.
  - 간선에 방향이 있으면 방향그래프, 방향이 없으면 무방향 그래프라 한다.
  - 정점 a와 b를 연결하는 간선을 (a,b)로 표현하고, 방향이 있는 경우 <a,b>로 표현한다.
  - 정점 a에 인접한 정점의 수를 a의 '차수'라고 정의한다.
  - 방향그래프에서는 차수를 진입차수, 진출차수로 구분한다.
  - 시작 정점과 도착점이 동일한 단순경로를 싸이클이라고 한다.
  - 그래프에서 정점들이 서로 연결되어 있는 부분을 연결성분(Component)라 한다.
  - (a,b,c), (e,f) 이렇게 연결성분은 2개가 있는 것이다.
  - 가중치 그래프는 간선에 가중치가 부여된 그래프다.

2. 그래프 자료구조
  - 그래프를 자료구조로 저장하기 위한 방법은 '인접행렬'과 '인접리스트' 두 가지가 있다.
  - n개의 정점을 가진 그래프의 인접행렬은 2차원 nxn 배열로 저장한다.
  - 인접행렬에서 정점 i와 j사이에 간선이 없으면 a[i][j]=0, 있으면 1로 표현한다.
  - 인접리스트는 각 정점마다 한 개의 연결리스트를 이용해 인접한 각 정점을 노드에 저장한다.

그래프에 관한 간단하게 정리 해 보았다. 다음 DFS 공부하고 블로그를 남기도록 하겠다.
끝~!!

댓글

이 블로그의 인기 게시물

[스프링부트2.0 낚시게시판] 01. 프로젝트 생성 및 환경을 세팅해 보자

첫번째. 이클립스에서 프로젝트를 생성해 보자. 빠밤! 1. 이클립스 실행하고 프로젝트 생성하기  - 이클립스 실행 후 File -> New -> Spring Starter Project클릭 ( 부트는 Spring Starter Project로!! )        해당 프로젝트 설정을 본인의 입맛에 맞게? 해주자. 처음엔 저와 똑같이 하는게 삽질(?)의 노고를 덜 수 있으니 저 같은 초보 개발자 분들이나 이제 막 공부를 시작 하셧다면 위와 가이 설정 하는걸 추천.  - New Spring Starter Project Dependencies    - Spring Boot Version : 2.0.2    - Core : DevTools, Security, Lombok 클릭    - Web : web  클릭    - SQL : JPA, H2 클릭    - template Engines : Mstache   --> 타임리프(요즘 회사에서 많이 쓴다고해서)   - 그다음 다음 -> Finish 클릭하게 되면 Maven에 관한 프로젝트가 생성된다.   처음엔 메이븐 디펜던시부분을 받느라 시간이 걸릴수 있다. 프로젝트 구조는 스프링과 별반 차이가 없어 보인다 프로젝트 구조 관련해선 조만간 포스팅 해봐야 겠다. (요즘 책 읽을 시간도 없어서...😂) 두번째. 실행을 해보자.  스프링 부트2.0의 특징은 자체적으로 톰켓이 내장 되어 있어 따로 톰켓을 설정하는 부분이 없어서 아주 매우 편안하게 되었다.    - 실행은 src/main/java 밑에 com.fishing.board 패키지 밑에 FishBoardApplication.java 오른쪽 클릭 후...

[SpringBoot] Spring Data JPA를 알아보자 [2탄 엔티티를 다루기]

이번 시간에는 엔티티 클래스 설계서 부터 테스트까지 진행해 보도록 하겠다. 1. 엔티티 클래스 설계   - JPA는 자동으로 테이블을 생성하는 기능을 가질 수 있다. 다음 2가지 방법이 있다.     1) SQL을 이용해 테이블을 먼저 생성하고 엔티티 클래스를 만드는 방법     2) JPA를 이용해 클래스만 설계하고 자동으로 테이블을 생성하는 방법   - 이중에서 2)번 방법을 알아보자.   - JPA 엔티티 클래스를 생성하는 작업은 다음 과정을 거친다     1) 클래스 설계     2) 각종 애너테이션을 이용해 제약 조건 추가 설정     3) 엔티티 간 연관관계 설정 1.1 엔티티 클래스 설계    package com . example . sutdy . domain ; import lombok.Getter ; import lombok.Setter ; import lombok.ToString ; import java.sql.Timestamp ; @Getter @Setter @ToString public class Board { private Long bno; private String title; private String writer; private String content; private Timestamp regdate; private Timestamp updatedate; }   - 위와 같이 일반적인 방법으로 클래스를 만들어 봤다. 다음 JPA 어노테이션에 관해 알아보고 붙여보자 1.1.2 JPA 어노테이션   - @Id : 각 엔티티를 구별할수 있도록 식별 ID부과.(일종의 primary key로 보면된다). 모든 엔티티에 반드시 지정하자.   - @Column : 인스턴스 ...

[스프링부트2.0 낚시게시판] 03. 네비게이션화를 해보자

이번시간에는 네비게이션화 일명 페이지 요청당 Path에 대해 작성해보자 화면 HTTP Request method parameter 설명 메인화면 / GET 루어낚시 메인 /lure GET ?/location='seoul'&room='aa'&context='aa'&page=1 location(지역), room(낚시터명), context(검색어) 루어낚시 상세보기 /lure/{no} GET ?/location='seoul'&room='aa'&context='aa'&page=1&no=1 location(지역), room(낚시터명), context(검색어), no(글번호) 루어낚시 댓글달기 /lure/{no}/reply POST ajax로 낚시스쿨 메인 /school GET 낚시스쿨 상세보기 /school/{no} GET 낚시스쿨 댓글달기 /school/{no}/reply POST 중고장터 메인 /shop GET 공지사항 메인 /notice GET ?category_no=1&page=1 로그인 화면 /users/login GET 로그인 성공 시 전에 요청했던 화면으로 이동하게끔 로그인 /users/login POST userid=""&password=""&rememberme="" 아이디, 패스워드를 입력 받고, rememberme 기능을 bool값으로 회원가입 화면 /users/join GET 회원가입 /users/join POST userid=""&birth=""&sex=""&phone=""&password=""&email="" 위는 HTTP 요청에 따른 화면전환 방법을 ...