python 알고리즘 공부
List 연장선 / 저번 TIL 에 이은 알고리즘 공부.
- 무엇을 분할? 입력사례 둘이상 작은 입력사례 분할
- 정복은? 작은 입력사례 '각' 정복
입력사례가 충분히 작지 않으면 재귀적으로 호출!
- 통합 : '각'정복값 해답 통합해 입력사례 도출
Sum - sorted - conquere - 합병- 정렬 - 정복!
미분 개념
'재귀'를 활용하는 대표 알고리즘
슬라이싱 (자바의 slice)
a[start: end:step]
start,end,step 모두 양음수
start: 슬라이싱 시작
end : 항상 위치 end -1
step : 보폭 몇개씩 가져오는지
a =['a','b','c','d']
-------
|a|b|c|d|
|0|1|2|3| 양수
|-4|-3|-2|-1| 음수
n + n/2 + n/4 ... 무한대로 쪼개서 더하는 개념
n번의 곱셈 수행.
def iterative_P(C,n):
result = 1
for _ in range(n):
result = result* C
return result
def Recur(n) :
if n == 0 :
return 0
if n == 1 || n ==2 :
return 1
return Recur(n-1) + Recur(n-2)
def Re_Power((C,n):
if n ==1:
return C
if n%2 == 0:
y = Re_Power(C , n/2)
return y*y
else:
y = Re_Power(C, (n-1)/2)
return y*y*C
W(n) : 크기가 n 배열 비교횟수
W(n) :W(n/2) +1 // 회기 호출 비교횟수 + 중간요소 비교 횟수
W(1) : 1
n = 2^k, k >= 1 일 때,
W(n) = W(n/2) +1
= W ((n/2^2) +1) +1 = W(n/2^2) +k
( n = 2^에 의해서 W(n/2^2) = W(n/n) = W(1) =1
= 1+k
( n = 2^에 의해서 k= logn)
1 + logn(포함됨..)0(logn)
배열크기 n
크기 n/2
크기 n/2/2
크기 n/2/2/2
크기 n/2/2/2/2
...
크기 2
크기 1
def merge_sort(n):
if len(n) <=1 : # 사이즈가 0/1 이면 리턴
return n
# divide 부분
mid = len(n) //2
left : n[:mid] # 슬라이싱 처음부터 mid-1까지
right : n[:mid]
# 리스트 크기가 1이 될때까지 merge_sort 재귀 호출
left = merge_sort(left)
right= merg_sort(right)
# conquer 부분 분할 리스트 병함
return merge (left,right)
추가 예시 :피보나치 수열
피보나치
느낀점: 행렬 계산다까먹었냐.. 손코딩 , 명제풀기
userRepo.find ({
relations: {
conatact :true ,
photo :{
album: true, },
}
)
`relations.photo.album /img Content-type :application/ x-www-form-urlencoded
`
의문 : restAPI 인경우 무조건 JSON 형식으로 req,res하는걸까? -> NO
default Content Type: application/ x-www-form-urlencoded 이라고 함.
콘텐트 타입이란 ? 보내는 자원의 형식을 명시하기 위해 헤더에 실리는 정보
출력 값
- HTTP GET 요청 을 보내면 다음과 같이 쿼리 매개 변수를 사용할 수 있습니다.
출력값 : Name=John+Smith&Age=23
Content-Type 형식 종류
1 content type : application
정의 : Rest API의 일반적인 json 형태?
Content-Type: Application/EDI-X12 <-- Defined in RFC 1767
- Content-Type: Application/EDIFACT <-- Defined in RFC 1767
- Content-Type: Application/javascript <-- Defined in RFC 4329
- Content-Type: Application/octet-stream : <-- 디폴트 미디어 타입은 운영체제 종종 실행파일, 다운로드를 의미
- Content-Type: Application/ogg <-- Defined in RFC 3534
- Content-Type: Application/x-shockwave-flash <-- Adobe Flash files
- Content-Type: Application/json <-- JavaScript Object Notation JSON; Defined in RFC 4627
- Content-Type: Application/x-www-form-urlencode <-- HTML Form 형태
* x-www-form-urlencode와 multipart/form-data은 둘다 폼 형태이지만 x-www-form-urlencode은 대용량 바이너리 테이터를 전송하기에 비능률적이기 때문에 대부분 첨부파일은 multipart/form-data를 사용하게 된다.
2 content type : multipart
- 참고로 multipart는 MIME(Multipurpose Internet Mail Extensions) 타입 중의 하나입니다.
- multipart/form-data를 처리하기 위한 서버는 멀티파트 메시지에 대해서 각 파트별로 분리하여 개별 파일의 정보를 얻게 됩니다.
- Content-Type: multipart/mixed: MIME E-mail;
- Content-Type: multipart/alternative: MIME E-mail;
- Content-Type: multipart/related: MIME E-mail <-- Defined in RFC 2387 and used by MHTML(HTML mail)
- Content-Type: multipart/formed-data <-- 파일 첨부
3 XML Media의 타입
정의 :xml이 붙은..?
- Content-Type: text/xml
- Content-Type: Application/xml
- Content-Type: Application/xml-external-parsed-entity
- Content-Type: Application/xml-dtd
- Content-Type: Application/mathtml+xml
- Content-Type: Application/xslt+xml
4 Multipart Related MIME 타입
- Content-Type: Multipart/related <-- 기본형태
- Content-Type: Application/X-FixedRecord
여기서 중요한 점은 이미지 파일을 전송한다고 해서 png나 jpg 파일을 전송하는 것이 아니라는 것입니다.
ex
export const axios_GetKakaoToken = (code: string) => {
return axios({
method: "POST",
url: "https://kauth.kakao.com/oauth/token",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
data: qs.stringify({
grant_type: "authorization_code",
client_id: kakao.clientID,
client_secret: kakao.clientSecret,
redirect_uri: kakao.redirectUri,
code: code,
}),
});
};
Git
// 원격 저장소와 로컬 저장소에 있는 파일을 삭제한다.
$ git rm [File Name]
// 원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에 있는 파일은 삭제하지 않는다.
$ git rm --cached [File Name]
https://gmlwjd9405.github.io/2018/05/17/git-delete-incorrect-files.html