xiayulu / algorithm

算法练习

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

算法设计**

“算法”这门学科会给人一种错觉:算法就是竞赛,搞算法的都是学霸大神,算法的数学很难,算法就是刷题,我用 C++ 一个算法也写不出,算法书都好厚,面试要考算法......这确实会造成算法难学的刻板印象。笔者也是深受这种刻板印象的影响,一提到算法就头痛,心里就会不自觉的产生抵触情绪。由于疫情的影响,自己没啥事干,就买了本算法书,静下心来看了之后发现算法其实没有我们想象的那么难。

这段经历不禁让我反思:如何科学的学习算法?算法有哪些学些方法?

从问题出发

传统的算法教学一般是按部就班的讲解算法,然后用算法去解题。那么,能不能换一个角度呢,即从问题的角度出发,先研究问题,然后提出解决的算法。实际上,后面一种场景更常见,更接近现实,然而自己正是缺乏这方面的知识。

所以,除了讲解算法,我们还在笔记中加入了对算法问题的讲解。

分类的方法

事实上,算法多如牛毛,学一个算法得一个算法,刷一个算法题得一个算法题。这种学习方法的有一个缺点:知识不成体系,学了不会用。总结自己的学习经验,发现学习类似的算法有助于理解算法,理解问题,更能找到算法的特点,更能接近算法的实质。

所以,一个个的学不如一类类的学。

编码练习

一般来说,算法是独立于编程语言实现的,即同一个算法应该可以用任何一种通用编程语言实现。但是,用不同语言实现算法也不简单,具体体现如下几个方面:

  • 对编程语言语法的熟练程度
  • 编程语言开发环境的搭建
  • 对计算机体系的理解,尤其是理解内存
  • 对语言标准库的应用
  • 用编程语言实现数据结构的能力

以上的知识或多或少会增加算法学习的难度,尤其是与特定语言结合的算法教程。正因为算法实现依赖以上知识,因此需要多练习,多总结,熟能生巧嘛。用编程语言实现算法能增加成就感与自信心,另一方面,实现算法也能提高编程语言应用能力。

所以,用你自己最喜欢的编程语言来实现算法吧。

教程概览

第一部分 预备知识

这部分讲义主要讲解一些预备知识,为后续的算法的设计实现打下基础。

  • 简单计算机组成原理

第二部分 数据结构

  • 数组
  • 链表

第三部分 算法设计设计**

  • 递归法
  • 分治法
  • 动态规划
  • 回溯算法

About

算法练习


Languages

Language:Python 100.0%