2016년 12월 23일 금요일

[Algorithm] 기본 정렬(SORT)


[종류]
Bubble Sort
Insertion Sort
Selection Sort


[Selection Sort]


실행은 i=첫번 째 배열인자 j는 i다음의 배열인자라면,
1cycle i = 1
         j = 2, 3, 4, 5
2cycle i = 2
         j = 3, 4, 5
.....
4cycle i = 4
         j = 5
이렇게 실행된다. 
오름차순 정렬이라면 i>j클시 스왑을 실행한다.





위 그림처럼 실행시간의 최단, 최장 실행시간이 없다. 모든 인자를 거치기 때문이다.
실행시간에 따른 시간복잡도는 배열이 5개라면 첫 사이클은(n-1) + 두번 째는(n-2) ...
결국 n(n-1) / 2가 실행시간이 된다.



[ Bubble Sort ]




















1cycle i = 1, 2, 3, 4     // n-1까지
         j = 2, 3, 4, 5     //i+1에서 n까지





















위의 선택정렬과 같이 버블정렬도 최단, 최장 실행시간이 없이 n(n-1)/2이다.




[ Insertion Sort ]


















실행은 1cycle은 1-2까지 정렬,
         2cycle은 1-3까지 정렬....
위 그림처럼 인자가 6개인 배열일 때 5cycle까지 돌면 정렬된다.
























삽입정렬은 정렬되어 있는 배열에 새로운 인자 삽입시 정렬을 하기위해 쓰이는데,
위 그림처럼 앞에서 부터 사이클을 도는 것보다 뒤에서 사이클 도는게 더 효율적이다.
또한 tmp라는 임시저장하는 장소로 자신이 위치할 곳을 찾은 다음, 뒤에 있는 인자들을
적절히 밀어내어 정렬은 완성시킨다.
 




















선택정렬, 버블정렬과 다르게 최장,최단 실행시간이 존재하는데,
인자가 5개인 배열일 경우
최단 시간는 5-1= 4번이다. 각각의 사이클 때 한번만에 정렬되었을 경우이다.
최장 시간는 역시 n(n-1) /2 사이클동안 인자 전부 비교했을 경우이다.




2016년 12월 22일 목요일

[Python] scrapy 홈페이지 크롤링


아래의 페이지의 데이터를 가져오겠다.


















1)전체 가져오기


먼저 내가 만든 scrapy프로젝트의 item.py를 수정한다.
Field()함수를 사용해 클래스 형태의 데이터를 변수에 담는다.
scrapy.item.Field()구조로 되어 있으므로 class에 scrapy.item을 상속한다.
title, link, desc와 같이 각자 사용한 아이템을 정의한다.

















그 다음 spider에서 실행할 코드파일 (.py)를 생성하고 아래와 같이 코딩한다.
name은 고유해야 하며 실행시 구분하는 용도이다.
def parse()함수가 실제 코드가 실행되는 부분이다. 정해진 url의 데이터가 response객체에
담겨진다. 아래는 html전체를 들고와 파일에 저장하는 코드이다.




커맨트 창에서 'scrapy crawl kang(위 코드의 name)
 kang이라는 파일이 생성되었다. 확인해보면 html데이터를 전부 들고 왔다.






2)Shell

또한 대화형인 shell을 통해 실시간으로 원하는 태그 등을 확인 할 수 있다.
터미널에서 "scrapy shell 확인할url" 을 치면 ">>>" 커맨드가 나온다.

전체가 또는 부분적으로 접근할 때는 selecter를 이용해 손쉽게 사용할 수 있다.
경로는 xpath, csspath 사용할 수 있다.







위의 p태그를 우클릭으로 xpath를 복사하면 다음과 같다.
/html/body/article/section[1]/div/div[1]/div/div/p



다시 shell로 돌아가서 현재 url의 title태그 모두를 보고 싶으면
>>>response.xpath('//title')          -> 리스트 형태로 출력된다.   '//'는 모든이라는 뜻

>>>response.xpath('//title').extract()          ->데이터 형태로
>>>response.xpath('//title/text()')             ->텍스트
>>>response.xpath('//title/text()').extract()  ->텍스트만 데이터 형태로




3)부분데이터 가져오기

p태그만 출력해보자.




















[Python]리눅스에서 환경변수 설정


bash쉘의 기준으로(터미널에서 echo $SHELL 로 자신의 쉘 종류를 확인)
1. 자신의 홈 디렉토리에서 .profile파일을 연다.

2. export PATH=/usr/local/bin:$PATH
   export PYTHONPATH= ~/PATH설정할 DIR이름     
   이 문장들을 추가

3. 터미널에서 source .profile 입력하여 파일 갱신
4. python으로 들어가 
   >>>import sys
   >>>sys.path
   로 자신이 설정한 Path를 확인할 수 있다.    

2016년 12월 20일 화요일

[Algorithm] recursive을 이용 factorial

[fibonacci number]
Ex]0+1+1+2+3+5+8+13
                                   
n= 6;
fibonacci(n) =  8

public int fibonacci(int n){
 if(n<2)
return n;
 else
return f(n-1) + f(n-2);
}


최대공약수[Euclid Method]
public static int gcd(int m, int n){
if(m<n){
int tmp = n; m=n; n=tmp;
}
if(m%n==0)
return n;
else
retrun gcd(n,m%n);
}

더 간단한 버전
public static int gcd(int m, int n){
if(n==0)
return m;
else
return gcd(n,M%n);
}



-모든 반복문은 recursive로 표현할 수 있다

2016년 12월 12일 월요일

[Python] python을 통한 web crawling_Beautifulsoup VS Scrapy

Beautifulsoup
-HTML문서에서 정보를 가져올 수 있는 Navigating이 잘 되어있다.
-자동으로 UTF-8로 출력한다.
-lxml, html5lib파서를 이용한다.
-http://www.crummy.com/software/BeautifulSoup/bs4/doc

Scarpy
-web scraper framework
-다양한 selector 지원
-파이프 라인
-로깅
-이메일
-http://doc.scrapy.org/en/0.24/intro/tutorial.html


scrapy startprogect tutorial(프로젝트이름) //프로젝트 만듬
-items.py : 데이터를 들고 올때 클레스형태로 만들어 줌
-pipelines.py : 데이터 후 처리를 위한 행동들 db입력,
-setings : pipe라인 순서 등 다양한 설정들을 정함
-spiders : 스크랩할 내용들을 프로그래밍 하는 곳.

2016년 12월 9일 금요일

[Python] 문법 (feat 점프 투 파이썬)