ITZY (있지) -Algorhythm(알고리즘)
2024.5.15에 일본에서 발매된 걸그룹 있지의 노래입니다.
갑자기 왠 걸그룹의 노래를 소개하냐? 조금 더 재미있게 접하기 위해서 인용해봤습니다 :)
노래 제목인 알고리즘은 아 윌고 위드 마이 리듬 (i'll go with my rhythm) 이라는 표현을 활용해 만든 단어입니다.
틀에 박힌 알고리즘은 무시고 자신만의 리듬으로 빛내자 라는 특유 긍정적인 메세지를 담았다고합니다.
그렇다면 여기서 말하는 알고리즘은 무엇일까요? 틀에 박힌 이란것을 보아 정해진 규칙따위나 누군가가 다 그렇게 행하는 것들 일것 같은데요. 사진 밑에 제 생각을 정리해 봤습니다.
위키백과 : 수학과 컴퓨터에서 사용되는 문제 해결 방법을 정의한 일련의 단계적 절차이자 어떠한 문제를 해결하기 위한 동작들의 모임. 또는 계산을 실행하기 위한 단계적 규칙과 절차를 의미함.
즉 문제 풀이에 필요한 계산 절차 또는 과정의 순서를 뜻한다.
네이버 사전 : 어떤 문제의 해결을 위하여 입력된 자료를 토대로 하여 원하는 출력을 유도하여 내는 규칙의 집합
여러 단계의 유한 집합으로 구성되는데 각 단계는 하느 또는 그 이상의 연산을 필요로한다.
알고리즘은 자연어, 의사코드, 순서도, 프로그래밍언어, 인터프리터가 작업하는 제어테이블, 유한상태기계의 상태도 등으로 표현 할 수 있다.
위의 정의된 내용들을 보면 알고리즘은 어떠한 '문제'를 해결하는 일련의 단계의 절차, 규칙의 집합이다.
그렇다면 어떠한 '문제' 라는것은 무엇일까?
네이버 사전 : 문제
1. 해답을 요구하는 물음.
2. 논쟁,논의, 연구 따위의 대상이 되는 것
3. 해결하기 어렵거나 난처한대상, 또는 그런일.
4. 귀찮은 일이나 말썽.
5. 어떠한 사물과 관련되는 일
사전적 정의의 문제는 위와 같다. 그렇다면 우리가 느끼는 문제는 무엇일까? 사회속에서 해답을 요구하는 물음인건가? 논쟁, 논의 연구따위의 대상이 되는것을 해결하는것일까?
내 생각에는 사회적으로나 자연적으로 발생하는 문제들이 있을 것 같다 예를들면 사회적인것은 문제를 느끼는 것들 , 예전에는 배달이 음식점마다 있었지만 지금처럼 통합으로 운영되지 않아서 불편함을 느낄수있었다, 자연적으로는 산불이 나는것을 최소화 시키는 문제 이런 것들이 있을수있다.
산업화가 진행되고 그 안에서 컴퓨터라는 것이 발명이되고 그 컴퓨터로 인해 우리는 급속도로 발전해왔던 이유중에 하나이다.
컴퓨터로 인해 사회적, 자연적으로 발생되는 문제가 어느정도 해결이 되는 상황이고 그 문제를 해결하기위해 프로그램을 개발을 해야한다 문제의 방향성에 맞춰서 말이다.
더 나아가서 개발자는 의사인것 같다. 고객이 생각하는 문제를 해결해야하니 말이다. 그래서 문제를 해결하기 위해 일련의 과정들을 잘 작성해야하며 알고리즘을 잘 컨트롤 할 수있게 되면 좋은 개발자가 될 수 있으니 말이다..\ 그냥 적어봤다
알고리즘의 조건 - 위키백과
입력 - 알고리즘은 0 또는 그 이상의 외부에서 제공된 자료가 존재해야한다.
출력 - 알고리즘은 최소 1개 이상의 결과를 가져아한다.
명확성 - 알고리즘의 단계는 명확하여 애매함이 없어야한다.
유한성 - 알고리즘의 단계들은 유한한 횟수로 거친 후 문제를 해결하고 종료해야한다. 알고리즘의 한단계 이후 m값은 n보다 작으며, m!=0 이면 n의 값은 다음 번 단계에서 줄어든다.
효과성 - 알고리즘의 모든 연산들은 사람이 종이와 연필을 이용하여 유한한 시간안에 정확하게 수행 할 수 있을정도로 단순해야한다.
알고리즘은 어떠한 입력이 있다면 입력에 따라 명령을 명확하게 실행하고, 효과적으로 입력에 따른 결과물을 도출 할 수 있다면 알괴즘으로 볼수 있다는 의미이다.
반대로 애매함이 있거나 유한한 시간안에 끝나는것이 보장되지 않는 경우를 메서드라고한다.
메서드의 단어의 의미 : 일정한 계획에 따른 방법, 격식과 정연에 따른 순서를 의미합니다.
예를들어서 산에서 길을 잃었을 경우 계곡을 찾아서 아래로 내려간뒤 물길을 따라 하류로 가면 된다 라는 것은 메서드이다.
알고리즘 사용
[자연어적 처리]
일상생활에서 사용하는 언어로 알고리즘을 만들수있다. 요즘 많이 하는 샌드위치 코딩으로 연습중이다.
(샌드위치코딩 예)
원룸에서 저녁에먹을 된장찌개 만들기
- 된장찌개 만드는 방법을 인터넷에 검색하여 레시피에 있는 재료와 도구를 확인한다. 재료 (두부1/2모, 양파1/2, 감자1/2,애호박 1/3,대파 1/2,된장2스푼,마늘1/2스푼,물 종이컵 6컵,다시마,멸치,청양고추) 도구 (도마, 뚝배기, 조리용 나이프, 숟가락,냄비)
- 확인한 재료와 도구가 원룸에 있는지 확인합니다.
- 재료와 도구가 없거나 부족한 경우에 원룸 밖으로 나가 마트로 이동후 없는 재료와 도구를 구매하여 원룸으로 돌아옵니다.
- 냄비에 물을 6컵을 넣고 다시다나 멸치 등 재료를 넣습니다.
[프로그래밍 언어적 처리]
자바언어에서 사용되는 클래스 내부에 함수를 만들수가 있습니다.
문제를 해결하는 절차(알고리즘)
반복되는 코드를 확인하는 절차가있고 문자가 반복되는 횟수를 줄여줍니다.
시간 복잡도
알고리즘의 소요 시간을 정확히 알수 없으므로 자료의 수 n이 증가 할때 시간이 증가하는 패턴을 시간 복잡도라는 이름을 나타내게 됩니다.
공간복잡도
알고리즘 실행에 대한 필요한 메모리의 양으로 볼수가 있습니다.
좋은 알고리즘이란?
단순하게 보면 적은 일련의 절차와 시간복잡도가 줄어든 즉 시간이 별로 걸리지 않고 최대의 효율을 내는것 이라고 생각합니다.
제 생각을 작성해 보았습니다.
'메모' 카테고리의 다른 글
[JAVA][Android] 리사이클러뷰를 말하자면.. (0) | 2024.10.22 |
---|---|
[메모] 알림과 알람의 차이 (Notification, Alarm) (2) | 2024.10.16 |