为什么要写数据结构,因为这是算法的灵魂。十年前我听老师讲这句话,觉得是扯淡,现在看来,确实是灵魂。没有见过鬼的人总觉得这世界上没有鬼,见过鬼的人也不会告诉别人鬼啥样(被吓死了呗)。

开始阅读博客之前,推荐大家一本书:《我的奋斗》作者罗永浩。

数据结构,顾名思义就是数据的结构,数据一般指数字、字符串等,结构就是数据的构造方式。计算机世界里的数据不能是杂乱无章的,必须要组织起来,就像人喜欢打扫卫生和喜欢干净一样,计算机也喜欢整齐的,有组织有纪律的数据。数据的组织方式多种多样,数据的格式和种类也有差别。为什么要有组织有纪律的组织数据呢?最好的答案就是搜索数据和对数据排序,或者在优化计算机处理速度的时候分析复杂度。

计算机用来处理的一个或者多个项,我们定义为一个集合。举个栗子,班集体,由老师、学生、课桌、板凳、黑板、教室、粉笔。。。等等组成的一个整体。所以我们认为班集体就是一个集合。在计算机世界里,狭义的讲就是进程或者更小的讲就是线程在处理数据的时候处理的对象的整体。所以,我们这里要讲的集合一般有线性的、层级的、图形状的、有序或者无需的数据组合的整体。

计算机处理数据最为常用的算法就是排序算法、搜索(查找)算法。这里优先介绍排序算法,而后介绍搜素算法的实现。

基本的排序算法有:选择排序、冒泡排序、插入排序

# -*- coding: UTF-8 -*-#选择排序
def selectedSort(myList):#获取list的长度length = len(myList)#一共进行多少轮比较for i in range(0,length-1):#默认设置最小值得index为当前值smallest = i#用当先最小index的值分别与后面的值进行比较,以便获取最小indexfor j in range(i+1,length-1):#如果找到比当前值小的index,则进行两值交换if myList[j]<myList[smallest]:tmp = myList[j]myList[j] = myList[smallest]myList[smallest]=tmpreturn myList
#冒泡排序
def buffleSort(myList):for i in range(0,len(myList)-1):for j in range(i+1,len(myList)):if myList[i] > myList[j]:myList[i], myList[j] = myList[j], myList[i]return myList
#插入排序
def insertionSort(myList):# 插入排序for i in range(1, len(myList)):key = myList[i]j = i - 1while j >= 0:if myList[j] > key:myList[j + 1] = myList[j]myList[j] = keyj -= 1print(myList)return myList
#主函数调用排序函数
if __name__ == '__main__':myList = [8, 7, 5, 0, 6, 4, 3]selectedSort(myList)buffleSort(myList)insertionSort(myList)

快速排序的算法有:分割排序和合并排序

快速排序的思想:首先从列表中点位置选取一项,定义为基准点。然后将列表的项分区。分而治之,对于字列表,递归的应用该过程。一个子列表包含了基准点左边的所有的项,另一个子列表包含了基准点右边的所有的项(一边大一边小)。每次遇到少于2个项的列表就结束。

基本的查找(搜索)算法有无序表的遍历查找法、序列表的二分法和插值法

# -*- coding: UTF-8 -*-
#遍历查找
def sequential_search(lis, key):for i in range(len(lis)):if lis[i] == key:return ielse:return False#序列表的二分查找:在查找表中不断取中间元素与查找值进行比较,以二分之一的倍率进行表范围的缩小。
def binary_search(lis, key):low = 0high = len(lis) - 1while low < high:mid = int((low + high) / 2)if key < lis[mid]:high = mid - 1elif key > lis[mid]:low = mid + 1else:return midreturn False
#插值法:插了一个mid = low + int((high - low) * (key - lis[low])/(lis[high] - lis[low]))的值
def binary_search(lis, key):low = 0high = len(lis) - 1while low < high:mid = low + int((high - low) * (key - lis[low])/(lis[high] - lis[low]))print("mid=%s, low=%s, high=%s" % (mid, low, high))if key < lis[mid]:high = mid - 1elif key > lis[mid]:low = mid + 1else:return midreturn Falseif __name__ == '__main__':LIST = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444]result = binary_search(LIST, 99)print(result)

基本算法介绍完毕,后续专门插入一章节专门介绍python中的数组、链表、栈、堆、树、图的实现。在学习机器学习的过程中,时常翻翻基础知识,往往给人带来源源不断的灵感。正所谓,温故而知新。

玩转人工智能(4)算法的灵魂之数据结构Python实战相关推荐

  1. 【从入门到高阶】NLP 算法的流程、主要任务及涉及算法,全都囊括了(Python 实战)

    NLP是人工智能领域历史较为悠久的领域,但由于语言的复杂性(语言表达多样性/歧义/模糊等等),如今的发展及收效相对缓慢.比尔·盖茨曾说过,"NLP是 AI 皇冠上的明珠." 在光鲜 ...

  2. 7天人工智能训练营,带你玩转机器学习与神经网络算法!(含6大实战练习,限200人)...

    在这个人工智能技术进入落地应用的爆发时代,作为有着技术追求的IT人,好像不懂点人工智能,就像与这个世界脱节了一样. 说到人工智能,想必大家都听说过一个词叫"神经网络",神经网络作为 ...

  3. 【机器学习PAI实战】—— 玩转人工智能之综述

    摘要: 基于人工智能火热的大背景下,通过阿里云的机器学习平台PAI在真实场景中的应用,详细阐述相关算法及使用方法,力求能够让读者读后能够马上动手利用PAI搭建属于自己的机器学习实用方案,真正利用PAI ...

  4. 重磅!人工智能与算法学习年终总结报告(珍藏版)

    各位读者大家好!今天向大家推荐一个非常优秀的公众号"人工智能与算法学习",这里是AI领域学习交流的平台!专注人工智能.机器学习.深度学习.计算机视觉.自然语言处理.算法原理.科技前 ...

  5. 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 分类问题是生活中最常遇到的问题之一.普通人在做出选择之前,可能会犹豫不决,但对机器而言,则是唯一必选的问题.我们可以通 ...

  6. 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?...

    模型训练与在线预测服务.推荐算法四部曲.机器学习PAI实战.更多精彩,尽在开发者分会场 [机器学习PAI实战]-- 玩转人工智能之综述 [机器学习PAI实战]-- 玩转人工智能之商品价格预测 [机器学 ...

  7. 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像...

    模型训练与在线预测服务.推荐算法四部曲.机器学习PAI实战.更多精彩,尽在 开发者分会场 [机器学习PAI实战]-- 玩转人工智能之综述 [机器学习PAI实战]-- 玩转人工智能之商品价格预测 [机器 ...

  8. 重磅!Uber发布史上最简单的深度学习框架Ludwig!不懂编程也能玩转人工智能

    点击我爱计算机视觉标星,更快获取CVML新技术 昨日,Uber官网重磅宣布新开源深度学习框架Ludwig,不需要懂编程知识,让专家能用的更顺手,让非专业人士也可以玩转人工智能,堪称史上最简单的深度学习 ...

  9. Uber发布史上最简单的深度学习框架Ludwig!不懂编程也能玩转人工智能

    昨日,Uber官网重磅宣布新开源深度学习框架Ludwig,不需要懂编程知识,让专家能用的更顺手,让非专业人士也可以玩转人工智能,堪称史上最简单的深度学习框架! image Ludwig是一个建立在Te ...

最新文章

  1. 互联网拥塞控制终极指南
  2. 广告出价--如何使用PID控制广告投放成本
  3. mysql控制台教程视频教程_mysql 控制台操作
  4. c语言中0级和1级是什么意思啊,C语言处理指针问题中,二级指针与一级指针的区别是什么?...
  5. 低代码开发平台是什么
  6. 详解:CDH预警配置 QQ邮箱 与 企业实操
  7. linux定时任务被挖矿修改,Linux挖矿威胁情报分享(被植入计划任务)
  8. 8255工作方式2——双向选通输入输出(A口)
  9. 澜起科技加速中国本土数据中心解决方案进程
  10. vs2013 win10 Caffe的编译安装(微软版本)
  11. AI人工智能简史-人工智能与炼金术
  12. web应用渗透测试流程
  13. rba有哪几個主要組成部分_RBA管理体系有哪些
  14. GC(1.1OOPMap)
  15. 【程序设计基础与实验】地铁售票查询系统
  16. 用户行为分析-解决某游戏公司用户数量停滞问题,给出营销策略
  17. 为什么看起来不是很复杂的网站,淘宝、腾讯却需要大量顶尖高手来开发?
  18. 微信订阅号申请流程及准备材料
  19. cURL error 77: error setting certificate verify locations: CAfile: d:\cacert.pem CApath: none (see h
  20. word页眉页码目录

热门文章

  1. y=ae二次拟合曲线c语言程序,对于y=ae^bx c指数函数怎么进行线性回归
  2. 这是在下写的一些小小的项目经验和项目需求
  3. 开心_小段子(笑笑更健康)
  4. 硬件基础元器件【2.电容篇】
  5. Python+Pyqt5开发日志关键字检索工具
  6. heartbeat如何监控程序_heartbeat+drbd监控脚本(自动发现问题,并邮件通知)
  7. 做了一个用友导出excel转为金三导入excel的软件
  8. (python基础)各种打印三角形
  9. 简易搭建一个私有云平台
  10. 害怕WiFi辐射?新技术可将辐射降至万分之一