def

哈夫曼树与哈夫曼编码的实现

三世轮回 提交于 2020-12-19 10:43:12
  哈夫曼树是一种特殊的树,结合前面做书上 动态规划题 的了解,哈夫曼树就是最优二叉树。   建立一颗哈夫曼树前需要明确条件,比如一颗词典树(节点值为单词),我们希望能通过我们的查找习惯建立一颗更快、更合适的二叉树,那么,这里的条件就是树中每个单词的搜索频率,显然,搜索频率越高的单词越靠近树根,查找效率会更好,通过搜索频率(权值)与节点离根节点的路径距离计算出WPL(带权路径长),当词典树的形态为某种情况的时候(哈夫曼树总是一颗满二叉树 — 除叶节点外,内部节点都是儿孙满堂的),WPL最小,那么这样的一颗二叉树就是最优二叉树,也就是我们想要的树的形态了。   可通过动态规划算法证明,上面描述的二叉树的各个节点是否与最优二叉树的各节点相等。当然书上还有更严谨的数学证明。   WPL计算很简单,公式:WPL = ∑ L i × P i (其中L是路径长度,P是权值)。   建立哈夫曼树很简单:初始化节点数据,维护一个最小优先队列,将节点按权值大小加入到优先队列中,然后将队列中的节点弹出,由下而上建立哈夫曼树。   算法伪python代码: ''' class node: int f; //权值 type var; //其他数据类型 node left; ndoe right; ''' def build_Huffman_tree(nodes): """

Python+Flask+MysqL的web建设技术过程

心已入冬 提交于 2020-12-19 10:36:37
一、前言(个人学期总结) 个人总结一下这学期对于Python+Flask+MysqL的web建设技术过程的学习体会,Flask小辣椒框架相对于其他框架而言,更加稳定,不会有莫名其妙的错误,容错性强,运行效果好,报错信息明了, Python是近几年流行起来的语言,简单易懂,很好上手,强大的库让我们可以站在巨人的肩膀上写代码,应证了人们常说的那句“人生苦短,我用python”,MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,基本功能都能准确无误的给予数据支持。在本次建站过程中,前端界面采用的是html、css、JavaScript,后端采用python作为支持。 从一开始接触的是turtle库绘制图形,在没有接触基本语法的情况下,以为会因为基础不扎实而学起来吃力,然而,turtle库的学习,打开了我们对python的学习兴趣的闸门,这是一门多么简洁实用的语言,python的第三方库是多么的强大,逐渐的,在对库的使用中熟悉了python的语法,学起来一点也不吃力,有了html基础,加上Bootstrap框架的引用,就可以制作出一个静态页面,再有了python基础以及连接数据库的知识,就可以完成web建站了。 本次的mysql运用的是远程数据库,便于搭建环境和数据存储

万物皆可 Serverless 之云函数 SCF+Kaggle 端到端验证码识别从训练到部署

眉间皱痕 提交于 2020-12-19 08:48:23
随着验证码技术的更新换代,传统的验证码识别算法已经越来越无用武之地了。近些年来人工智能迅速发展,尤其是在深度学习神经网络这一块生态尤为繁荣,各种算法和模型层出不穷。 本文来自 Serverless 社区用户「乂乂又又」供稿 今天本文就尝试带大家借助 Kaggle+SCF 快速训练部署一个端到端的通用验证码识别模型,真正的验证码识别从入门到应用的一条龙服务,哈哈哈~ 效果展示 操作步骤 第一步:了解 kaggle 没做过数据科学竞赛的同学,可能不太了解 kaggle 哈。 Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals. 这是 kaggle 官网 )的自我介绍,简单来说 kaggle 是全球最大的数据科学交流社区,上面有许多关于数据科学的竞赛和数据集,并且提供了一些数据科学在线分析的环境和工具,一直以来吸引了全球大批数据科学爱好者,社区极其繁荣。 这里我们主要是用 kaggle 的 Notebooks 服务里的 kernel 环境来快速在云端训练自己的验证码识别模型。 你可能会问在本地训练不可以吗,为啥非得折腾着上云?哈哈,这还真不是折腾,普通人的电脑算力其实是有限的

python 排序 堆排序

蹲街弑〆低调 提交于 2020-12-19 08:06:34
算法思想 :   堆排序利用 堆 数据结构设计的一种排序算法,堆是一种近似完全二叉树的结构,同时满足堆积的性质,即对于任意的i均有ki>=k(2i+1),ki>=k(2i+2) 步骤: 将数组转化为 最大堆 将当前堆的根结点和最后一个结点交换,然后将前n-1个元素转化为最大堆 重复上一过程 为什么要是最大堆呢,因为这样方便再第二步交换的时候可以将最大的放在最后,得到最后升序的结果 算法实现:   堆排序的主要复杂的地方就是在于生成最大堆的算法,而且这一算法要能被后面调整最大堆的时候用上,因为调整最大堆时候是从根节点开始向下的,所以生成最大堆的算法也设计为 从堆中只有只有一个或两个子节点的结点开始(很好找n-2//2),一层一层的向上 ,而在每个节点的调整过程中,都是从上到下的,如果和子节点交换了,就再对这个子节点调整。经过对比,这也是生成最大堆的算法中最快的一种。 def heap_sort5(collection): length=len(collection) def adjustment(collection,index,heap_length): #index要加入堆中的一个数,index是collection中的下标 #当队列已经变成大顶堆的时候,通过让根节点和最后一个元素交换,然后在对前n-1个元素组成的堆进行调整,重新变为大顶堆 #为了实现上面的功能

Python(九)Tornado web 框架

戏子无情 提交于 2020-12-19 06:50:41
一、简介    Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp ,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化。   Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这就意味着对于实时的 Web 服务来说,Tornado 是一个理想的 Web 框架。开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem 。)   请参见 Tornado 文档 或 Tornado 原文文档(镜像) 以详细了解该 Web 框架。 下载和安装 pip安装 pip3 install tornado 源码安装 tar xvzf tornado -4.4.1 .tar.gz cd tornado -4.4.1 python setup.py build sudo

python web框架之Tornado的简单使用

☆樱花仙子☆ 提交于 2020-12-19 06:44:00
python web框架有很多,比如常用的有django,flask等。今天主要介绍Tornado ,Tornado是一个用Python写的相对简单的、不设障碍的Web服务器架构,用以处理上万的同时的连接口,让实时的Web服务通畅起来。虽然跟现在的一些用Python写的Web架构相似,比如Django,但Tornado更注重速度,能够处理海量的同时发生的流量。接下来,就开始撸起来吧。 1.首先需要安装Tornado库: pip install tornado 2.新建一个python文件(demo.py)代码如下: import tornado.web # 这里定义一个类并继承RequestHandler这类作为路由类 class MainHandler(tornado.web.RequestHandler): # 重写get方法 def get(self): # 输出内容到界面 self.write('Hello, world') # 这里就是路由配置 app = tornado.web.Application([ ('/', MainHandler), ] ) if __name__ =='__main__': # 设置监听端口 app.listen(9999) # 启动服务器 tornado.ioloop.IOLoop.instance().start() 3.运行demo

[Python]Matplotlib绘图基础

删除回忆录丶 提交于 2020-12-19 06:09:48
1.简介 Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。 2.绘图基础 2.1 图表基本元素 图例和标题 x轴和y轴、刻度、刻度标签 绘图区域及边框 网格线 2.2 图表基本属性 多重绘图属性: 是否在同一个图上绘制多个系列的线 多重子图属性: 是否生成多个子图,并在每个子图上绘制多个系列的线 3.绘图方式 3.1 Pyplot API [1] 3.1.1 属性设置函数 绘制图边框: box 为图表添加图例: figlegend 为轴系列添加图例:legend 为图添加标题:title 在图上添加文字: figtext 在轴系列上添加文字:text 设置网格: grid 设置多重绘图:hold 使用紧密布局:tight_layout 改变刻度和刻度标签的样式:tick_params / ticklabel_format 设置最小刻度:minorticks_off / minorticks_on 在多个子图上方绘制超级标题:suptitle 为图表添加数据表:table 共享x轴或y轴:twinx / twiny 设置x/y标签:xlabel / ylabel 设置x/y极限:xlim / ylim 设置x/y刻度:xticks / yticks 3.1.2 属性获取函数 获取系列轴:gca 获取图表:gcf

Django——Ajax

流过昼夜 提交于 2020-12-19 04:38:42
一、Ajax准备知识:json 1.什么是json JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的 数据交换 格式。 它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 2.JS对象 由于json可以说是从JS这门语言中衍生出来的文本交换格式,所以json支持的数据类型也是JS所支持的。 之前说过,json之所以流行就是应为在跨语言场景的可用性。因此通过json序列化再反序列化所得到的结果可能不同。 合格的json对象: [ " one " , " two " , " three " ] { " one " : 1 , " two " : 2 , " three " : 3 } { " names " : [ " 张三 " , " 李四 " ] } [ { " name " : " 张三 " }, { " name " : " 李四 " } ] 不合格的json对象: { name: " 张三 " , ' age ' : 32 } // 属性名必须使用双引号 [ 32 , 64 , 128 , 0xFFF ] // 不能使用十六进制值

Scala学习之路 (八)Scala的隐式转换和隐式参数

若如初见. 提交于 2020-12-19 04:36:22
一、概念 Scala 2.10引入了一种叫做隐式类的新特性。隐式类指的是用 implicit 关键字修饰的类。在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。 隐式转换和隐式参数是Scala中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。 二、作用 隐式的对类的方法进行增强,丰富现有类库的功能 三、隐式参数 1)关键字:implicat 2)隐士的东西只能在object里面才能使用 3)作用域 四、隐式转换函数 是指那种以implicit关键字声明的带有单个参数的函数。 可以通过: :implicit –v 这个命令显示所有做隐式转换的类。 四、隐士转换的发生的时机 1、当一个对象去调用某个方法,但是这个对象并不具备这个方法 (1)scala源码示例 1是Int类型,从to方法看,Int应该有to方法 打开Int类的源码查看,并没有Int本身并没有to方法,发现Int继承了AnyVal类 查看AnyVal类,发现AnyVal类同样没有to方法,而AnyVal类继承了Any类 Any类里面没有to方法,而在RichInt里面有to方法 而在上面查看scala自动导入隐式转换函数时可以看到有Predef类的intWrapper方法,传入的参数是Int,返回的结果类型是RichInt (2

python_Tkinter

我的未来我决定 提交于 2020-12-19 04:24:51
Tkinter相关 python支持多种图形界面的第三方库,包括: TK wxWidgets QT GTK 等等 但是python自带的库是支持TK的TKinter,使用使用Tkinter,无需安装任何包,就可以直接使用。 我使用的是pycharm编写的python,用的是python2.7版本。 要使用tkinter,首先需要导入Python提供的 tkinter模块。 from ttk import * 这是在我的电脑上适用的导入tkinter模块的语句。 在tkinter模块导入的时候遇到问题时,看见一个实用的回答: try : from tkinter import * except ImportError: # Python 2.x PythonVersion = 2 from Tkinter import * from tkFont import Font from ttk import * from tkMessageBox import * import tkFileDialog else : # Python 3.x PythonVersion = 3 from tkinter.font import Font from tkinter.ttk import * from tkinter.messagebox import * 代码部分