这两天找了很多关于Python讲解数据结构和算法的书和视频,最终确定下来《python数据结构与算法分析》以及北京大学线上课程“数据结构与算法python版”,先看了课程后来发现好像课程结构和这本书差不多,就当配套视频看了。

刚开始还是从一些理论知识开始,虽然也想马上开始敲代码,但是理论内容还是需要掌握一些的,确实有给自己带来一些新的认识。我也一直重视自己关于编程思维方面的训练,正好借助学习算法的机会锻炼一下自己解决问题的能力。

应该认识到的是虽然python现在很热门,但是python只是工具,就像计算机科学并不仅是研究计算机本身,尽管计算机在这一学科中是非常重要的工具,但也仅仅只是个工具。学习python和学习计算机科学一样,研究的对象是问题、解决问题的过程,以及通过该过程得到的解决方案。给定一个问题,计算机科学家的目标是开发一个能够逐步解决该问题的算法。当然算法并不是万能的,某些问题并没有解决方案,认清这一事实很重要。

抽象

抽象是把我们认为对问题不重要的部分抛弃掉,只留下问题的本质的信息就叫做抽象。抽象思维使得我们能够分别从逻辑视角和物理视角来看待问题及解决方案。就像我们使用手机一样,我们会使用通信工具、听音乐、打游戏等,但我们并不需要了解这些功能的实现细节。我们都是从逻辑视角或者使用者视角来看待手机,但是程序员、技术支持人员则从另一个角度看待手机,他们必须知道操作系统的原理、网络协议的配置,以及如何编写各种脚本来控制手机等。他们必须能够控制用户不需要了解的底层细节。

编程上抽象的例子如python的模块,比如我们要计算平方根,我们知道可以导入math模块

import 

导入math模块,使用sqrt方法我们就知道可以求出16的平方根4,我们并不需要知道平方根究竟是如何计算出来的,只需要知道计算平方根的函数名是什么以及如何使用它,这是过程抽象

为什么要学习数据结构及抽象数据类型

计算机中的所有数据实例均由二进制字符串来表达。为了赋予这些数据实际的意义,必须要有数据类型,例如整型、浮点型等。简单的计算问题可以由常见的数据类型解决,但我们会发现需要问题及其解决方案都过于复杂。尽管由编程语言提供的简单的控制语句和数据类型能够表达复杂的解决方案,但它们在解决问题的过程中仍存在不足。

因此,为了控制问题及解决方案的复杂度,计算机科学家利用抽象来帮助自己专注于全局,从而避免迷失在众多细节中。通过对问题进行建模,可以更高效的解决问题。模型可以帮助计算机科学家更一致的描述算法要用到的数据。

过程抽象将功能实现细节隐藏起来,从而使用户能够从更高的视角来看待功能。数据抽象的基本思想与此类似。抽象数据类型(ADT)从逻辑上描述了如何看待数据及其运算而无需考虑具体实现。通过这样的抽象,我们对数据进行了一层封装,基本思想是封装具体的实现细节,使它们对用户不可见。

抽象数据类型的实现被称为数据结构。

为何学习算法

各种算法之间往往差异巨大,学习算法可以掌握比较不同算法的分析技巧。要能够区分有解的问题,无解的问题,以及虽然有解但需要过多的资源和时间来求解的问题。

在选择算法时,经常会有所权衡。需要学会如何评估一个解决方案。练习如何找到一个解决方案并且确定其为优秀的解决方案。

最大公约数求解优化

在“python自学日记2——函数调试”中有写过一次求最大公约数的代码如下:

def 

这段代码有点冗余的地方就是不需要判断a是否等于0,因为a等于0的情况在下面的判断中包含了,另外这段代码有另一个问题:print(b)正常显示,return b在gcd(10,5)这种一次整除情况下能显示输出结果,在无法整除的例如gcd(3,4)这种则不显示结果,要注意print和return的区别。

所以改成代码如下:

def 

这样代码更精简,而且也不用纠结return b还是print(b)的问题了。

python gmm em算法 2维数据_python自学日记18——数据结构与算法(2)相关推荐

  1. python中字典是几维数据_Python 中的多维字典

    Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...

  2. python考研参考书目_Python自学日记28——如何选择学习资料

    这两天把数据结构和算法当做定期学习任务转向web开发阶段学习,前天开始学习Django,发现资料过时,很多Django代码在新版本里总是报错,刚开始还坚持了一段时间,把最初的步骤都通过查别人的调整代码 ...

  3. 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片

    端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...

  4. 可视化:python绘制多组多维数据雷达图

    超过3维的数据用雷达图可以十分直观地展示.本文实践过程中以灰度共生矩阵的4项常用指标为例. python绘制多组多维数据雷达图 所使用的数据如下所示:每一行是一个样本,每个样本有4维特征(列). 封装 ...

  5. Python/numpy之ravel()多维数据展平函数

    Python/numpy之ravel()多维数据展平函数 可参考官方文档numpy.ravel或末尾摘抄内容 ravel()将多维数据展平为一维数据,可以选择不同的数据索引方式(见文档参数四个可选值) ...

  6. python多维数据_python多维数据

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 平行坐标图中每条垂直的线代表一个特征,表中一行的数据在图中表现为一条折线,不同颜 ...

  7. 【数据挖掘】数据挖掘总结 ( K-Means 聚类算法 | 二维数据的 K-Means 聚类 ) ★

    文章目录 一. K-Means 聚类算法流程 二. 二维数据的 K-Means 聚类 1. 第一次迭代 2. 第二次迭代 参考博客 : [数据挖掘]聚类算法 简介 ( 基于划分的聚类方法 | 基于层次 ...

  8. python怎么分析各个时间段的数据_Python数据分析:Python对Word数据的读写

    <大数据和人工智能交流>头条号向广大初学者新增C .Java .Python .Scala.javascript 等目前流行的计算机.大数据编程语言,希望大家以后关注本头条号更多的内容. ...

  9. python读取序列5之后的数据_Python 基本功: 5. 数据序列化

    这篇文章紧接着前篇:多多教Python:Python 基本功: 4. 读写文件​zhuanlan.zhihu.com 仔细阅读的小伙伴会发现,在基本功4 里最后的一个示例中,我们读取解析了文件中的内容 ...

最新文章

  1. UBI系统原理-中【转】
  2. 线性代数之相似矩阵与二次型基础点
  3. Linux备份全攻略
  4. 【ajax】Ajax $().load() 禁用缓存
  5. 2.5、调用后置处理器
  6. python sum_Python sum()
  7. Git(14)-- Git分支-- 分支管理
  8. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)
  9. iOS 15 TableView刷新组头适配问题
  10. cocos2d-之音乐背景播放
  11. 如何使用unirest
  12. win7防火墙例外设置方法_win7防火墙添加端口方法
  13. FCM 模糊C均值聚类算法
  14. DTRO垃圾渗滤液处理设备技术要点详解
  15. 线性代数(3):矩阵
  16. 【教程】超详细通过Shizuku转生微信集成WeXposed实现防撤回与红包
  17. 表头让你头疼?看这几招解决Pandas读取Excel表头的问题
  18. 【C++】链表反转逆序|建立、删除、修改、插入|linux内核链表与普通链表
  19. 【读书笔记】《平凡的世界》- 路遥
  20. 【OpenCV-Python】教程:1-2 视频读取显示保存

热门文章

  1. python oracle orm_Python ORM
  2. C++类模板5分钟入门
  3. QImage QPixmap Mat区别
  4. 解决$ is not define
  5. Jmeter跨线程组传递参数
  6. 【Python】单线程异步多线程多进程实例
  7. 带你一起学软件工程的专业英语!(IT行业、四六级党快记起来)《软件工程专业英语》第一单元:启动软件项目——单词、短语、名词缩写、难句、备忘录的基本格式样本(必备技能)
  8. moodle3.7中文语言包
  9. Django REST Framework API Guide 07
  10. div水平垂直居中的六种方法