재미있는 파이썬 프로그래밍(4. 데이터 구조 및 알고리즘 소개)

데이터 구조와 알고리즘은 프로그래밍에서 매우 중요합니다. 데이터 구조는 데이터를 구성하고 저장하는 방법인 반면, 알고리즘은 문제를 해결하기 위한 방법 및 단계입니다. 도전하고 싶은 블루브릿지컵은 실제로 문제를 해결하기 위한 알고리즘을 설계하는 것입니다. 사실 다양한 프로그래밍 언어는 도구일 뿐이며, 프로그램의 핵심 = 자료구조 + 알고리즘이다. 무술을 연습하는 것과 마찬가지로 데이터 구조와 알고리즘은 내부 기술이고, 다양한 프로그래밍 언어는 단지 칼, 총, 막대기일 뿐이므로 필요에 따라 상황에 따라 편리한 무기를 선택하세요.

머리말

다양한 파이썬 책을 훑어본 결과 순수 지식 포인트 세뇌이거나, 어린이를 위한 그림과 게임 과제가 너무 많고, 프로그래밍을 체계적으로 만들기에는 지식 포인트가 너무 사소하다는 사실을 발견했습니다. (그 방법이 나쁘다는 것이 아니라 효과가 제한적일 뿐이며 실현하는 데 수년이 걸릴 수 있습니다.) 이는 이 튜토리얼 시리즈가 지금까지 코드 라인을 시작하지 않은 이유이기도 합니다. 지식 배경을 먼저 소개해야만 후속 학습이 더욱 효과적일 수 있습니다.

학생들에게 질문하는 습관을 장려하십시오. 배움에는 의심이 중요하다. 명나라의 교육자 주희(朱熙)는 "의심을 배우고 아는 것이 중요하다. 작은 의심은 작은 발전으로 이어지고, 큰 의심은 큰 발전으로 이어진다"고 말했다. 학습 과정에서 의심과 혼란을 갖는 것은 정상이며 심지어 필요한 것입니다. . 열등감이나 비판에 대한 두려움에 대해 걱정할 필요가 없습니다. 특정 지식 포인트에 대해 질문이 있을 때만 심도 있는 연구를 수행하고 답을 찾아 진정으로 이해하고 숙달할 수 있기 때문입니다. "읽기에 대해 의심이 없는 사람은 의심하도록 가르쳐야 하고, 의심이 있는 사람은 의심하지 말아야 합니다. 이것이 발전할 수 있는 유일한 방법입니다." 이 인용문은 "Zhu Zi Yu Lei·Xue Wu·Reading Methods"에서 나왔습니다. 두 번째 부분".

파이썬을 배우려면 파이썬만 배울 수는 없습니다. 먼저 전체적인 그림을 이해하고 배경과 기초를 채워야 합니다. 그렇지 않으면 "루산에 있다고 해서 루산의 진짜 모습을 알지 못하기 쉽습니다." 이 산." (적어도 컴퓨터의 역사와 기초를 잡아야 한다. 결국 초보자는 컴퓨터 과학을 전공하는 대학생과 다르다. 운영체제, 데이터 구조 알고리즘, 프로그래밍 언어 등의 기본 과정을 갖추고 강의를 시작할 수 있다. 파이썬).

작문을 쓰듯이, 어떻게 하면 좋은 작문을 쓸 수 있을까요?

스타일에 대해 글을 쓰고 싶다면 스타일에 대해서만 쓸 수는 없습니다. 호수의 잔물결, 구름이 가는 곳, 날아다니는 모래가 떠다니는 곳, 처마에 달린 종소리, 배와 대나무 뗏목의 잔물결, 사람들의 옷자락과 옷깃 끝을 써야 한다. 반항적인 머리카락, 잡히지 않는 풍선에 대해 써 보세요.

눈에 관해 글을 쓰고 싶다면 눈에 대해서만 쓸 수는 없습니다. 세상 모든 것의 차가움, 밝음, 광대함, 슬픔에 대해 글을 써 보세요. 밤을 깨우기 위해 땅에 부는 북풍과 추운 겨울에 대해 글을 쓸 필요가 있다. Yuan Chi의 밀랍인형과 산에서 춤추는 은뱀에 대해 글을 써 보세요. 다리 아래에 형성된 얼음과 거리를 걷는 사람들에 대해 적어 보세요. 매화의 오만함과 결단, 수천 개의 산을 날아다니는 새들, 길을 가다가 사라지는 사람들의 이야기를 써라. 끝까지 고심 끝에 글로 써 넣었다. 흰머리는 분리되지 않는다. , 사원의 눈이 서로를 바라 봅니다.

한 달에 대해 쓰고 싶다면 그 달에 대해서만 쓸 수는 없습니다. Yin Qing을 쓰려면 둥글고 누락을 쓰십시오. 맑은 빛에 가려진 상처와 외로움에 대해 써 보세요. 깊은 숲 속에서 사슴이 움직이고, 그림자가 희박하고 비스듬하게 그려져 있다는 것을 쓸 필요가 있다. 밤에 눈이 울부짖는 강한 슬픔에 대해서도 쓰고 싶습니다. 솔솔 부는 바람과 계곡의 피아노 소리에 대한 노래를 쓰고, 물에 흘러 향을 피우는 것과 고대 사원의 문이 닫히는 것에 대한 노래를 쓰세요. 지금까지 펜을 놓으면 한 마디도 언급하지 않고 어디에나 있을 것입니다.

비에 대해 쓰고 싶다면 비에 대해서만 쓸 수는 없습니다. 저는 Bajiao와 Luoxu에 대해 글을 쓰고 싶습니다. 세상이 간파할 수 없는 이별과 만남에 대해 글을 써 보세요. 바산의 밤과 자두가 노랗게 변하는 시간에 대해 적어 보세요. 상사병과 잔여 문장에 관한 종이 더미를 작성하세요. 황혼녘 창밖에 떨어지는 물소리를 봉황나무에게 속삭이듯이 적어 보세요. 그런 다음 스님의 집 계단 앞의 사원은 이미 별이 빛나고 비관주의는 항상 무자비하다고 썼습니다. 그러다가 갑자기 펜을 접어 시의 후반부에 당신을 적어 넣었습니다. 슬픔만 남았습니다.

구름에 대해 쓰고 싶다면 구름에 대해서만 쓸 수는 없습니다. 자연에 관해 글을 쓰고 바람을 따라가세요. 세상을 떠다니는 것과 날아다니는 것에 대해 글을 써 보세요. 옷도 아름답고, 얼굴도 아름답고, 창틀이 햇빛에 노출되어 있다고 써야 한다. 지는 해가 금을 녹이는 것에 대해 쓰세요. 사람들은 어디에 있나요? 영원히 지속될 깊은 사랑의 괴로움과 증거 부족에 대해 적어 보세요. 이 비단 책을 쓴 후에는 보내기를 중단하겠습니다 슬픔은 사람들을 슬프게 만듭니다. 글을 쓸 때도 보고 싶고, 황혼에도 그리워요. 그런 다음 높이 나는 모든 새, 내리는 눈, 갈대에서 피어오르는 연기에 대해 적어 보세요. 끝까지 Chao Sixi Ji Ti는 Chushan과 Qinshan이 모두 흰 구름이고 백운 부서 책임자가 당신을 따른다고 썼습니다.

여름에 대해 쓰고 싶다면 여름에 대해서만 쓸 수는 없습니다. 더위를 쓰고 싶다면 매미의 지저귀는 소리를 써야 한다. 세상이 간파할 수 없는 그리움과 만남을 글로 써 보세요. 나는 황혼녘에 부는 주황빛 바람과 거친 여름밤에 대해 쓰고 싶습니다. 매미들이 시끄럽게 지저귀고, 저녁바람도 시원하지 않습니다. 장미의 낭만과 멋짐이 가득합니다. 강물에 부는 부드러운 바람과 항상 당신을 동반하는 밝은 달빛에 대해 적어보세요. 그런 다음 약 10마일의 푸른 나무와 연꽃, 그리고 긴 여름을 쓰세요.

가을에 대해 쓰고 싶다면, 가을에 대해서만 쓸 수는 없습니다. 나는 이 세상의 끝없는 사랑병과 고민에 대한 그리움과 이별에 대해 쓰고 싶다. 나는 갈고리 같은 초승달을 안고 말없이 홀로 서관으로 올라가는 이야기를 쓰고 싶다. 소매에 은은한 향이 나고 사람이 노란 꽃보다 가늘다고 적혀 있다. 매달 당신의 기대와 요구를 적어보세요. 바나나 나무를 때리는 이슬비에 대해 쓰고, 하수구로 흘러가는 열광에 대해 쓰세요. 그런 다음 희미한 종소리와 함께 고수시 외곽의 고대 청한사에 대해 글을 써보세요.

Python을 배우려면 Python만 배울 수는 없으며 컴퓨터의 역사와 기본 컴퓨터 지식을 이해해야 합니다. 데이터 구조, 운영 체제, 컴퓨터 네트워크, 데이터베이스 등을 포함한 특정 컴퓨터 기반이 필요합니다. 이런 방법으로만 우리는 Python 언어를 더 잘 익히고 적용할 수 있으므로 학습이 더 효율적일 수 있습니다.

데이터 구조 및 알고리즘 소개

프로그래밍에서는 데이터 구조와 알고리즘이 매우 중요합니다. "프로그램 = 데이터 구조 + 알고리즘"은 데이터 구조와 알고리즘의 중요성을 보여줍니다. 데이터 구조는 데이터가 저장되고 조작되는 방식을 정의하는 프로그램의 기초입니다. 알고리즘은 프로그램의 논리이자 영혼이며, 프로그램이 문제를 해결하기 위해 데이터를 처리하는 방법을 정의합니다. 앞으로의 프로그래밍에서 매우 중요한 데이터 구조와 알고리즘에 대한 개념을 처음부터 익히는 것이 중요합니다.

데이터 구조와 알고리즘에 대한 지식만으로도 책을 쓰기에 충분하지만, 여전히 일부를 언급할 필요가 있습니다. "문은 주인이 주도하고 실천은 개인에게 있다"는 말처럼 실제로 데이터 구조와 알고리즘은 프로그래밍 과정 전반에 걸쳐 존재해왔고, 때로는 그냥 사용하고 주의를 기울이지 않을 때도 있습니다.

데이터 구조

데이터 구조는 데이터를 효율적으로 액세스, 검색 및 수정할 수 있도록 구성하는 방법입니다. 데이터 구조마다 성능 특성이 다릅니다. 예를 들어 배열은 요소에 무작위로 액세스할 수 있고, 연결된 목록은 요소를 효율적으로 삽입 및 삭제할 수 있으며, 이진 검색 트리는 log(n) 시간 내에 검색을 완료할 수 있습니다. 올바른 데이터 구조를 선택하면 프로그램의 효율성과 가독성에 큰 영향을 미칠 수 있습니다.

나중에 다루게 될 Python의 배열, 문자열, 목록, 튜플, 딕셔너리는 실제로는 데이터 구조로서 데이터를 저장하고 구성하는 데 사용할 수 있으며 각 유형에는 고유한 특성과 용도가 있습니다. 리스트와 튜플은 선형 데이터 구조인 반면 사전은 비선형 데이터 구조입니다.

선형 데이터 구조는 데이터 요소 간에 선형 관계가 있는 데이터 구조, 즉 두 데이터 요소 간에 일대일 관계가 있는 데이터 구조를 나타냅니다.

일반적인 선형 데이터 구조에는 선형 목록, 스택, 큐, 이중 종료 큐, 문자열(문자열) 및 연결 목록이 포함됩니다.​  

비선형 데이터 구조는 데이터 요소 사이에 선형 관계가 없는 데이터 구조를 의미합니다. 즉, 임의의 두 데이터 요소 간에 다대일 또는 일대다 관계가 있을 수 있습니다. 일반적인 비선형 데이터 구조에는 트리, 이진 트리, 힙 및 그래프가 포함됩니다.

선형 데이터 구조의 특징은 요소들 사이에 선형 관계가 있어 데이터 요소에 일정한 순서로 접근하거나 조작할 수 있지만 삽입과 삭제 작업이 어렵고 비효율적이라는 점이다.

비선형 데이터 구조의 특징은 요소들 사이에 명확한 선형 관계가 없고 복잡한 계층적 구조와 관계를 나타낼 수 있다는 점이지만, 데이터 요소에 접근하고 조작하는 순서는 특정 작업 경로에 따라 달라지므로 충분히 직관적이지 않습니다. 일부 시나리오에서는 비선형 데이터 구조에 대한 삽입 및 삭제 작업이 더 효율적입니다.

- 배열: 동일한 유형의 데이터 요소 모음을 저장하고 액세스하는 데 사용됩니다.

- 문자열: 텍스트 데이터를 저장하고 조작하는 데 사용되는 데이터 유형입니다.

- 목록: 모든 유형의 데이터 요소를 저장하고 액세스하는 데 사용되는 정렬된 컬렉션입니다.

- 튜플: 모든 유형의 데이터 요소를 저장하고 액세스하는 데 사용되는 정렬된 컬렉션이지만 튜플은 변경할 수 없습니다.

- 사전: 키-값 쌍 데이터를 저장하고 액세스하는 데 사용되는 데이터 유형입니다.

물론 데이터 구조를 사용자 정의할 수도 있습니다! 클래스 정의를 통해 Python에서 사용자 정의 데이터 구조를 생성할 수 있습니다. 수업이란 무엇입니까? 객체란 무엇입니까? 처음에는 초보자가 이해하기 쉽지 않을 수도 있지만, 사용할수록 자연스럽게 이해하게 될 것입니다. 먼저 간단한 감상을 위해 간략한 소개를 하고, 나중에 사용하게 되면 설명하겠습니다.

수업이란 무엇입니까?

클래스는 데이터 구조의 추상화, 현실 세계의 추상화이며 객체를 생성하는 데 사용되는 모델이며 객체의 속성과 메서드를 정의합니다.

객체란 무엇입니까?

객체는 클래스의 인스턴스이며 클래스에 의해 정의된 속성과 메서드를 갖습니다. 클래스는 객체의 특성과 동작을 설명하는 객체의 청사진입니다. 객체는 클래스의 구체적인 인스턴스이며 클래스의 특성과 동작을 구체적으로 구현합니다.

클래스와 객체는 객체지향 프로그래밍에서 중요한 개념입니다. 클래스와 개체를 통해 코드를 더 잘 구성하고 관리할 수 있어 코드 재사용성과 유지 관리성이 향상됩니다.

클래스 속성은 클래스 관련 정보를 저장하는 데 사용되는 클래스의 멤버 변수이며 클래스의 모든 메서드에서 사용할 수 있습니다. 클래스 메소드는 클래스의 동작을 정의하는 데 사용되며 클래스의 속성에 액세스하고 수정할 수 있는 클래스의 멤버 함수입니다. 클래스의 속성과 메서드는 클래스의 구성 요소이며 클래스의 특성과 동작을 설명하는 데 사용됩니다.

자동차의 예를 들어 클래스가 무엇인지, 객체가 무엇인지 이야기해 보겠습니다.

자동차에 대해 이야기할 때 자동차는 클래스입니다. 이는 동일한 특성과 동작(바퀴, 주행 및 휘파람이 있는 차량)을 가진 객체 클래스를 설명하지만 어떤 종류의 자동차인지는 알 수 없습니다. 당신은 그것이 어떤 특성을 가지고 있는지 대략적으로 알 수 있습니다. 하지만 차를 아는 것만으로는 절대 직접 운전할 수 없고, 특정 자동차 업체를 찾아야 합니다. my car와 같은 특정 자동차는 car 클래스의 객체로, 클래스에서 정의한 특성(속도, 연료 잔량 등의 변수)과 동작(시작, 정지, 회전 등의 기능)에 대한 특정 인스턴스를 갖습니다. 수업. . 클래스는 추상적이고 객체는 구체적입니다. 클래스는 객체의 템플릿이고 객체는 클래스의 인스턴스입니다.

동물에 관해 이야기할 때 동물은 동일한 특성과 행동을 가진 객체의 클래스를 설명하는 클래스입니다. 내 애완견과 같은 특정 동물은 이 클래스의 객체이며, 이 클래스에서 정의한 특성과 행동의 특정 인스턴스를 가지고 있습니다. 클래스는 추상적이고 객체는 구체적입니다. 클래스는 객체의 템플릿이고 객체는 클래스의 인스턴스입니다.

프로그래밍에서 클래스와 객체의 중요성은 무엇입니까?

클래스와 객체는 객체지향 프로그래밍에서 중요한 개념이지만, 클래스와 객체 없이 직접 절차적 프로그래밍을 할 수도 있습니다. 이전의 간단한 프로그래밍 작업 중 일부에는 기본적으로 이러한 측면이 포함되지 않았지만 앞으로 프로그래밍에 더 깊이 들어가면 클래스와 개체가 확실히 사용됩니다.

그러나 이를 사용하면 실제 세계에 대한 좋은 시뮬레이션을 제공하고 코드를 구성하고 관리하는 방법을 제공한다는 이점이 있습니다. 클래스와 객체의 존재는 다음과 같은 의미를 갖습니다.

 1. 모듈화: 클래스와 객체는 프로그램을 모듈로 나눌 수 있으며, 각 모듈은 고유한 클래스와 객체를 가지므로 프로그램의 복잡성을 줄이고 코드의 유지 관리성과 재사용성을 향상시킵니다.​  

2. 추상화: 클래스와 객체는 특정 문제를 추상 데이터 유형으로 추상화하고, 내부 구현 세부 정보를 숨기고, 필요한 인터페이스만 노출함으로써 프로그램의 복잡성을 줄이고 코드의 가독성과 이해성을 향상시킬 수 있습니다.​  

3. 캡슐화: 클래스와 객체는 데이터와 기능을 함께 캡슐화하여 독립적인 단위를 형성할 수 있으며, 임의의 외부 액세스 및 수정으로부터 데이터를 보호하여 프로그램의 보안과 안정성을 향상시킵니다.​  

4. 상속: 클래스와 객체는 상속을 통해 클래스 간의 관계를 설정할 수 있으므로 코드 공유 및 재사용을 실현하고 코드 중복을 줄이고 코드 확장성과 유지 관리성을 향상시킬 수 있습니다.

즉, 클래스와 객체는 객체지향 프로그래밍에서 중요한 개념으로, 코드의 유지관리성, 재사용성, 확장성, 가독성, 이해성, 보안성, 안정성을 향상시키고 프로그램의 복잡성을 줄여 프로그래밍 효율성을 향상시킬 수 있습니다.

연산

알고리즘은 프로그래밍의 필수적인 부분이기도 하지만 때로는 그것이 존재한다는 사실을 깨닫지 못할 수도 있습니다. 알고리즘은 문제를 해결하거나 특정 작업을 완료하기 위한 일련의 명시적인 지침입니다. 여러분이 수행하는 다양한 프로그래밍 작업은 실제로 문제를 해결하기 위한 알고리즘을 설계하는 것으로 간주될 수 있습니다.

알고리즘은 입력을 출력으로 매핑하도록 설계된 문제 해결을 위한 일련의 명확한 지침입니다. 알고리즘은 일반적으로 계산, 데이터 처리, 자동화된 추론과 같은 작업을 수행하는 데 사용됩니다. 알고리즘은 자연어, 순서도, 의사코드, 컴퓨터 프로그래밍 언어 등 다양한 방식으로 표현될 수 있습니다. 알고리즘의 선택은 문제의 성격, 필요한 계산 리소스, 목표 출력의 형태에 따라 달라집니다. 알고리즘의 일반적인 예로는 정렬 알고리즘(예: 버블 정렬 및 빠른 정렬), 검색 알고리즘(예: 선형 검색 및 이진 검색), 암호화 알고리즘(예: 대칭 키 알고리즘 및 공개 키 알고리즘)이 있습니다. 알고리즘은 코드와 독립적으로 존재할 수 있으며 자연어, 순서도, 의사코드, 컴퓨터 프로그래밍 언어 등 다양한 방식으로 표현될 수 있습니다. 알고리즘은 특정 프로그래밍 언어와 독립적으로 존재할 수 있습니다.

예를 들어 제가 데뷔 질문을 하면 1부터 100까지 더하면 어떻게 하시겠습니까? 귀하의 구현은 간단한 알고리즘이라고도 할 수 있습니다.

일반적인 알고리즘은 무엇입니까?

일반적인 알고리즘에는 정렬 알고리즘(예: 버블 정렬, 삽입 정렬, 빠른 정렬), 검색 알고리즘(예: 선형 검색, 이진 검색), 암호화 알고리즘(예: 대칭 키 알고리즘, 공개 키 알고리즘), 최단 경로 알고리즘(예: Dijkstra 알고리즘), 그래프 알고리즘(예: 깊이 우선 탐색 알고리즘, 너비 우선 탐색 알고리즘) 등

스탠포드 대학이 학생들에게 이진 검색 알고리즘을 가르친 후 "책을 찢는 것"을 수행한 방법에 대한 이야기를 들려드리겠습니다. 경험 많은 외국인 강사들의 강의가 생생하게 진행됩니다.책에서 특정 단어를 검색하는 것을 예로 들어보고, 원하는 단어를 빨리 찾는 방법은 무엇인지 물어보세요. 먼저 책의 절반을 펴고, 찾을 수 없으면 절반을 떼어낸 다음, 나머지 절반에 있는 책의 절반을 열어서 찾을 때까지 찾아보세요. 수천 페이지에 달하는 두꺼운 책에서 단어를 찾는 데 몇 단계만 거치면 된다고 생각하시나요? 아마도 십여 단계 만에 찾았을 것입니다. 충분히 빨랐습니다. 이렇게 책의 절반을 나눠서 책의 절반에서 특정 단어를 찾는 방식을 알고리즘이라고 할 수 있습니다.

요약하다

데이터 구조와 알고리즘은 컴퓨터 과학의 기초입니다. 데이터 구조와 알고리즘을 이해하면 프로그래머가 프로그램의 동작과 성능을 더 잘 이해하고 더 효율적이고 유지 관리 가능한 코드를 작성할 수 있습니다. 또한 데이터 구조와 알고리즘은 컴퓨터 과학의 핵심 개념이기도 하며 복잡한 소프트웨어를 작성하고 실제 문제를 해결하는 데 중요합니다.

기타 리소스

참고 링크

추천

출처blog.csdn.net/qq8864/article/details/134499230