- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 C语言实现笛卡尔树
假设有一个序列{9,3,7,1,8,12,10,20,15,18,5},以此序列来建立一个笛卡尔树,则建好后的二叉树,中序访问该二叉树仍会得到原来的序列{9,3,7,1,8,12,10,20,15,18,5},且该二叉树还是一个堆(大根堆或小根堆)。每次插入新节点,从栈顶一个个比较,比新节点值大的节点弹出,直到找到合适位置。每次从右链的末端到根部进行遍历,找到合适的位置插入新节点,并把值更大的节点调整到新节点的左子树中。(设右链有k个节点),将新节点直接接到右链的右端,作为右链新的叶子节点即可,因为。
2023-01-06 20:04:38 539
原创 利用动态规划求解电影节问题
描述大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。输入多组数据。每组数据开头是n(n<=100),表示共n场电影。接下来n行,每行两个整数(0到1000之间),表示一场电影的放映区间n=0则数据结束输出对每组数据输出最多能看几部电影样例输入83 40 7 3 8 15 1915 2010 158 18 6 12 0样例输出3原
2022-04-14 16:41:25 387
原创 利用网络爬虫备份某论坛历史数据
前一阵子铁血网站关闭了,姥爷是铁血十多年的老用户,就委托我帮他把历史文章导出。导出后是这个样子。点开txt文件,我们能发现,图片以链接的形式存在文本文档中。因为用了十多年,文字和图片的量真的不小。如何把这些图片也全部保存下来?这正好是爬虫的用武之地。总体思路如下:1.遍历文件夹中所有的txt文件。2.对每个txt进行读取,利用正则表达式,提取其中的图片网址url,加入到列表中。3.遍历列表中的url,进行保存代码如下所示:import osimport reimp.
2022-02-07 10:05:33 341
原创 最大子序和问题(C语言求解)
题目描述如下:给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。这道题可用动态规划的方法求解,思路如下:以序列【-2,1,-3,4】为例,该序列的长度为4,如果求解它的最大子序列的和呢?假设我们已经知道,该序列中,所有长度为3的子序列的最大子序列的和,那么,你能否知道整个长度为4的序列的最大子序列的和?我们来分情况讨论,有以下三种情况:第一种是,最长的子序列发生了变化,也就是,最长的子序列长度为4,也就是【-2,1,-3,4】本身就是最..
2021-10-16 16:29:03 904
原创 利用Python爬虫抓取小说网站全部文章
我们先来选定爬取目标,我爬取的网站是https://www.17k.com/,一些大型的网站(如起点、豆瓣等)做了反爬虫的部署,这会大大增加我们抓取的难度,所以尽量还是选一些不那么热门的网站。爬虫的第一步,也是最重要的一步,就是分析网页的结构,定位到我们想要抓取的内容。首先点开一本书的某一章节,这里以小说《第九特区》的第一章《初来乍到》为例展开(https://www.17k.com/chapter/3038645/38755562.html),分析某一章的页面内容结构。首先来看标题,这个非常.
2020-11-26 15:44:10 4510 1
原创 P1055 ISBN号码问题
题目描述:每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字、11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如00代表英语;第一个分隔符-之后的三位数字代表出版社,例如670670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。识别码的计算方法如下:首位数字乘以1
2020-07-04 17:58:06 296
原创 两种方法解决月度开销问题——C语言
问题描述如下:农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。约翰的目标是合理安排每个fajo月包含的天...
2020-04-08 09:52:47 1521
原创 利用栈实现二叉树的前序遍历——C语言
首先我们定义以下二叉树的数据结构,通过结构体定义,代码如下:struct Tree { int n; struct Tree* p; struct Tree* left; struct Tree* right;};struct BinaryTree { struct Tree* root;};为了完成深度优先搜索,我们需要借助于栈结构。包括压栈,出栈操作,基于数组实现...
2020-04-03 10:27:10 2910
原创 不借助指针实现链表——利用多数组实现
有些语言不提供指针,这时候我们怎么实现链表?可以借助数组来实现。基本思路如下:在链表中,之所以利用指针,主要是用来存储后继节点和前驱节点的位置。如果不用指针,使用数组下标也可以表示一个节点的位置。比如我们可以定义三个数组:key,next和prev,key[i]用来存放i号节点的值,next[i]用来存放i号节点的后继节点的下标,prev[i]用来存放i号节点的前驱节点的下标。这样借助于数组的...
2020-04-02 11:44:03 1056
原创 用带哨兵的双向循环链表,实现O(1)时间的UNION操作
问题描述:动态集合操作UNION以两个不相交的集合S1,和S2作为输入,并返回集合S1=S1US2, 包含S1和S2的所有元素。该操作通常会破坏集合S1和S2。试说明如何选用一种合适的表类数据结构,来支持0(1)时间的UNION操作。问题分析:分析题目的要求,首先S1和S2是不相交的,并且在进行合并的时候是可以破坏S1和S2的,所以我们可以想到链表。题目的要求是要在O(1)时间内完成U...
2020-04-01 11:48:42 332
原创 C语言实现单链表的逆转
问题描述:给出一个O(n)时间的非递归过程,实现队一个含n个元素的单链表的逆转。要求除存储链表本身所需的空间外,该过程只能使用固定大小的存储空间。问题分析:题目给我们的数据结构是单链表。我们在循环中,每次把链表的next指针指向它的前驱节点就行了。但是当前节点的next指针修改后,它原本的下一个节点就找不到了,所以我们需要一个额外变量保存下一个节点。这样,程序需要三个变量p,q,r,q...
2020-04-01 09:53:11 2485
原创 用两个队列实现栈——C语言实现
如何用两个队列实现栈?思路分析:建立队列q1,在第队列中入队元素1,2,3,4。我们知道,队列是先进先出的,如果出队的话,得到的元素是1,而不是4。而按照栈的要求,出栈的元素应该是4.那么怎样得到队列的最后一个元素4呢?这个时候,就要借助第二个队列了。建立空队列q2,我们可以将队列的中元素一个个出队,然后将出来的元素入队到队列q2中。这样,分别将1,2,3从队列q1中出队,然后入队队列...
2020-03-30 11:25:05 2105
原创 双端队列的实现——C语言
题目要求:插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4 个时间均为0(1)的过程,分别实现在双端队列的两端插人和删除元素的操作,该队列是用一个数组实现的。解题思路:利用数组来存储元素,设置两个变量head和tail,分别记录队列头部元素的下标和尾部“将要插入”元素的下标。从尾...
2020-03-27 10:53:33 4001 1
原创 Python解决回文串问题——分别用循环和切片实现
问题描述:回文联,它是我国对联中的一种。用回文形式写成的对联,既可顺读,也可倒读。不仅它的意思不变,而且颇具趣味。是我国的重要文化之一。有趣的回文联有 斗鸡山上山鸡斗 天连水尾水连天 鱼傍水活水傍鱼等。写代码,输入字符串s,判断s是否是回文联。常规方法:我们先来用最通常的方法来解决这道题,即借助循环:先比较字符串的第一个字符和最后一个字符,如果相等,则比较第二个字符和...
2020-03-26 09:49:30 1076
原创 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
这道题是谭浩强版C语言指针部分的练习题。拿到这道题,我第一印象是用链表来解决。不过既然是C语言的课后题,我们用数组加指针的思路来解决也无妨。解题思路如下:定义一个函数,接受人数n。我们初始化一个从1顺序排到n的数组,方便以后的操作。思路就是按顺序循环报数,每当报到3的时候,让当前元素退出(将值置为0代表退出)。同时用一个值来记录当前队伍中还剩多少人,当队伍中还剩一人的时候,循环结束。从...
2020-02-29 16:23:21 5893 1
原创 C语言关于定义动态数组的发现
今天在给学生培训的时候,讲到C语言中定义数组的时候,数组的长度只能是常量和常量表达式,而不能是变量(不能动态定义数组)。通过一段代码进行演示。#include<stdio.h>int main() { int len; scanf("%d",&len); int a[len]; for(int i=0;i<len;i++){ a[i]=i; pri...
2020-01-20 22:11:33 609
原创 求两个字符串的最长公共子序列-python实现
原问题出自《算法导论》15.4,问题描述如下:给定两个序列X和Y,求X和Y长度最长的公共子序列。利用动态规划算法,自顶向下求解。函数定义如下:输入列表m和n,返回最长公共子序列的长度。def lcs(m,n): mlen = len(m) nlen = len(n) c = [] for i in range(mlen+1): c.a...
2019-11-18 15:20:20 1210
原创 钢条切割算法python实现
本问题是动态规划中的基本问题,问题出自算法导论15.1。问题描述如下:给定一段长度为n英寸的钢条和一个价格表(i=1,2,……n),求切割钢条方案,使得销售收益最大。采用自底向上的动态规划算法实现,代码如下:def getValue(p,n): c = 1 global values values = [0] global l l = [0]...
2019-11-13 11:40:59 1134
原创 矩阵链乘法-python实现
原问题出自算法导论第三版15.2的练习题。问题如下:对矩阵规模序列<5,10,3,12,5,50,6>,求矩阵链最优括号化方案代码如下:def matrix_order(): matrix = (5,10,4,12,5,500,6) bignum = 999999999 cost = [] s = [] for i in range...
2019-11-13 11:39:49 1191
原创 水仙花数的三种解决方法(Python实现)
先来了解一下什么是水仙花数。水仙花数是这样一个三位数:它的个位数、十位数、百位数的三次方之和,等于它自身。例如,153就是一个水仙花数,因为153=1^3+5^3+3^3。470也是一个水仙花数,因为470=4^3+7^3+0^3。我们今天的任务就是,编程求100到999之间所有的水仙花数。那么这个题目的关键就是,给定一个三位数abc,如何获得它的个位数c,十位数b,百位数a?我们先来...
2019-09-26 17:54:19 16267 1
原创 浅谈信息检索
什么是信息检索信息检索,这个词听起来很学术,如果换一个词语:搜索,谷歌,百度,相信大家一定不陌生。在过去,信息检索是图书馆等机构用来为大量数据建立索引,快速查询的一种方式,主要依赖人工整理的方式。互联网时代的到来和搜索引擎的出现,彻底颠覆了信息检索这样一门技术。我们今天介绍的信息检索,主要内容就是教大家怎样用好搜索引擎。做搜索引擎技术最好的公司是谷歌,现在的市值8000万美元左...
2019-07-27 14:34:49 577
原创 正则表达式分析email地址——Python实现
首先分析emali地址的规则,以bill.gates@microsoft.com为例,可以将一个email地址分为三部分。第一部分是bill.gate,它的规则可以描述为正数个字母、数字和.的组成。第二部分为固定字符@.第三部分以microsoft.com为例,它的规则可以描述为正数个字母数字+.com。明确了规则,正则表达式可以如下所示r'^[\d\w\.]+@[\d\w]+\.com...
2019-07-22 15:04:29 753
原创 python抓取zol付费壁纸
代码仅限技术交流,禁止任何商业用途学习了Jack-Cui的爬虫文章,颇有收获。拿http://desk.zol.com.cn/来练练手。点开第一张壁纸:可以发现,有的壁纸是要付费下载的。今天我们就利用爬虫,批量获取这些壁纸。用到的两个重要库 selenium 和BeautifulSoup,对库不熟悉的,建议看http://blog.csdn.net/c406495762/article/detai...
2018-02-08 16:58:13 924
原创 已知二叉树前序,中序遍历,求后序遍历,java实现
简单介绍一下思想,先看前序,前序遍历的第一个节点,就是该树的根。在中序中找到该根的位置,设为index,在中序遍历集合中,位于index之前的属于根的左子树,位于index之后的属于根的右子树。然后,对左右子数,遍历的调用该过程,就能将树结构还原。之后后序遍历也就不是问题了。public class M { public static class Tree{ public int value
2017-05-11 19:57:40 3313
原创 基于朴素贝叶斯文本的分类器构造
朴素贝叶斯算法,对于文本分类器是较为适用的。楼主在做项目的时候,有一批url数据需要处理。需要给定url,给出相应的文件类型。首先要人工贴标签,构造数据集合。数据集合如图所示。然后,要人工构造dictionary,也就是你认为会影响文件类型的单词,如“儿歌”,“游戏”等,这个地方,是影响模型精度的关键,需要花费很大的功夫不断调试。而且,往往dictionary向量要很大才能获得理想结果。
2017-01-13 11:37:11 613
原创 从fit文件中提取lick指数的matlab程序
lick指数的定义及公式,可以参考以下网址:http://d.wanfangdata.com.cn/periodical/dlxyxb201406010本程序实现从fit文件中读取lick指数clear;clc;tic; readDir = 'E://cas/b6'; %direction of fits readPath = [readDir '\*.fit']
2017-01-12 10:51:55 1105
原创 Toast无法显示,先看看有没有犯这种错误
今天开发安卓,发现Toast怎样都无法显示。查了半天资料,handler,message啥的都试过了,最后一检查,原来没有调用show()函数!Toast.makeText().show()希望大家不用在类似的错误上浪费时间了。
2017-01-08 19:52:04 643 1
原创 java实现透明网桥自学习算法
首先定义输入的数据类data,包括目的地址和所提交的端口public class Data { public String addString; public int port;}然后是转发表类sendTable,记录哪个目的地址经哪个端口转发public class SendTable { public Data [] data; public int write; public
2017-01-04 11:47:33 1877 1
原创 Bmob发送短信验证码官方demo更新(3.5.0)版本
Bmob云后端,大家用过的话会知道很方便的,用户管理,文件上传,短信验证的功能都能轻松实现。楼主也是刚开始学习用。sdk的更新据说挺勤的,这也导致官方给的示例文档和demo项目,在新的sdk环境下会报各种语法错误。然而做项目必须要用新的sdk,因为旧版本的文件上传等功能已经不支持了。今天就把官方的短信验证码的demo在新sdk下的代码贴上来,供后来人参考吧(楼主用的sdk是3.5.0版的哦
2016-11-29 10:25:47 4399 2
原创 java实现C语言子集的语法分析器
如题,只是做一个算法的演示,所以并不能识别C语言全部的关键字,像int 等关键字会被识别为标识符。可以按照自己需求自行扩充保留字表。程序功能:词法分析器从input文件中读入一小段C语言源程序,以二元式形式按顺序输出所有单词。输出结果在显示器上显示,同时存入output文件中。输入的C语言源程序中的所有标识符都要添加到标识符表id-list中,所有无符号整数都要添加到无符号整数表uint-
2016-11-25 17:57:03 2919
原创 java实现基于距离向量算法 路由协议
算法就不多说了,该程序实现的功能:首先你要将网络结构转化成邻接矩阵,每个路由器对应一行,若路由器m与网络n直接相连,则m行n列为1,否则为0该程序的路由器和网络都从0开始编号首先创建Table类,代表路由器的路由表public class Table { public int hostId;//哪个路由器的路由表 public int netId;//目的网络的id
2016-11-23 09:28:39 7060 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人