算法与数据结构
文章平均质量分 63
rongyongfeikai2
这个作者很懒,什么都没留下…
展开
-
跳跃表C语言实现
我们都知道,链表的好处是插入和删除方便,但是遍历则比较慢。如果要找到链表最末尾的元素,那么需要查找时间复杂度是O(n)。跳跃表就是为了解决这个问题而提出,跳跃表可以理解为在链表的基础上加上了多级索引。为了保证插入的均衡以及查询的速率,跳跃表的新节点插入时,会计算一个随机的层数(不大于最大层数)。然后从该层逐步向最底层插入,当该层没有元素时,那么这个新的节点就是第一个元素。而如果该层已经有元素时,则在插入时会保证该层的全体元素整体有序。插入的代码如下(其中MAXLEVEL是跳表的最大层数):原创 2021-11-12 13:05:02 · 1885 阅读 · 1 评论 -
一种IP命中交叉网段的查找算法
1.问题描述假设有一堆网段,如下所示:192.168.1.100-192.168.1.120,AAA,id1192.168.1.50-192.168.1.150,BBB,id210.67.1.1/24,CCC,id310.67.1.1,DDD,id410.67.1.0,EEE,id5第一列是单IP或者网段,第二列是设备hash,第三列是这个IP或者网段的唯一标志。...原创 2020-01-11 15:01:10 · 1249 阅读 · 0 评论 -
ZOJ1009解题报告
EnigmaTime Limit: 10 Seconds Memory Limit: 32768 KB In World War II, Germany once used an electronic encryption machine called Enigma, which played a decisive role in the initial victor原创 2012-03-06 23:04:21 · 2058 阅读 · 1 评论 -
并查集
并查集是一种比较有用的数据结构,主要是用于解决将一些元素合并和查找元素在某个集合的操作,即union操作和findSet操作。其中,利用有根树实现并查集的方法是普遍使用的方法,也是效率最优的方法。 在并查集一开始时,每个元素做为一个单独的集合,即每个都是只含有一个根的子树。 在合并的时候,主要是采用按秩合并。在开始时,每个元素的秩为0,随着合并秩发生变化。 其中包括makeSe原创 2012-05-21 18:34:18 · 681 阅读 · 0 评论 -
建筑群最长坡值
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1031题目的内容为:描述建筑群所有建筑高度分别为h1、h2…hN,可以得到一些单调递减的序列hi1、hi2…hiK,其长度称为建筑群的坡值,这里1≤i1< i2≤N。你的任务:对于给定的建筑群所有建筑高度,求出建筑群最原创 2012-05-22 15:35:06 · 1471 阅读 · 0 评论 -
多项式乘法
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1006题目为: 多项式乘法 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:171 测试通过:77 描述 线性原创 2012-05-21 18:26:12 · 1424 阅读 · 0 评论 -
乘积最大
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1017题目的描述为: 乘积最大 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:228 测试通过:100 描述原创 2012-05-21 18:30:08 · 1310 阅读 · 0 评论 -
多项式加法
题目的链接为http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1005题目如下: 多项式加法 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:964 测试通过:100 描述 线原创 2012-05-21 18:32:39 · 5477 阅读 · 0 评论 -
线性表的操作
题目的链接地址为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1004题目为: 线性表操作 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:1610 测试通过:340 描述原创 2012-05-21 18:33:25 · 1510 阅读 · 0 评论 -
哈弗曼编码与译码
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1022题目的描述为: 哈夫曼编码与译码 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:343 测试通过:123 描述原创 2012-05-21 18:28:28 · 1713 阅读 · 0 评论 -
二叉树复制和左右子树互换
题目的地址:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1021题目的描述: 二叉树复制和左右子树互换 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:272 测试通过:174 描述原创 2012-05-21 18:29:22 · 4999 阅读 · 0 评论 -
2的N次方
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1009题目为: 2的N次方 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:999 测试通过:500 描述 编原创 2012-05-21 18:31:28 · 3510 阅读 · 0 评论 -
Digital Roots
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1028题目为: Digital Roots 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:329 测试通过:112 描述原创 2012-05-21 18:27:32 · 4063 阅读 · 1 评论 -
短语搜索
题目链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1029题目为:描述常见文本编辑器的一个功能是搜索,打开一段英文文字,根据一个给定的英文短语,可以搜索得到这个短语在文章中的位置,短语有可能重复出现。现请求出给定的短语在一段文字中出现的最后一个位置。文字中单词从1开始编号,所求的位置原创 2012-05-21 18:24:07 · 1181 阅读 · 0 评论 -
ZOJ1016解题报告
ParencodingsTime Limit: 2 Seconds Memory Limit: 65536 KB Let S = s1 s2 ... s2n be a well-formed string of parentheses. S can be encoded in two different ways:By an integer sequenc原创 2012-03-07 10:58:26 · 1589 阅读 · 0 评论 -
二叉堆
要实现插入和查找操作,可以用队列。普通的队列,先入先出,那么对于插入insert操作,是常数级的时间复杂度;而对于查找操作,则需要遍历整个队列,需要时间O(n);我们也可以在插入时保证队列的有序,那么插入操作的时间复杂度为O(n),而查找操作则是O(1)。也可以用二叉查找树实现容器,进行插入和查找操作,时间复杂度均为O(lgn)。但是如果输入本身有序,会导致二叉查找树的深度急剧增大。而二叉平衡原创 2012-04-23 13:35:12 · 854 阅读 · 0 评论 -
POJ1010解题报告
STAMPSTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 12309 Accepted: 3356DescriptionHave you done any Philately lately? You have been hired by the Ru原创 2012-04-24 18:16:16 · 1402 阅读 · 0 评论 -
POJ1015搜索做法,TLE但是思路没有错
Jury CompromiseTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 20163 Accepted: 5086 Special JudgeDescriptionIn Frobnia, a far-away country, the verdic原创 2012-04-25 15:46:10 · 981 阅读 · 0 评论 -
图的邻接矩阵表示形式,DFS和BFS,最小生成树Prim和Kruscal,单源最短路径Dijkstra算法
图的邻接矩阵表示:package com.AlgorithmDemo.Graphic;/* * author:Tammy Pi * function:邻接矩阵的图 */public class AdMatrixGraph { //节点个数 private int nodenum=0; //边个数 private int cirnum=0; //原创 2012-04-17 09:20:38 · 3091 阅读 · 0 评论 -
JAVA版二叉树的先序、中序、后序和层次遍历
package com.Algorithm.Tree;import java.util.*;/* * author:Tammy Pi * function:二叉树 */public class BinaryTree { private Scanner scanner=null; private TreeNode treenode=null; private原创 2012-04-18 09:28:12 · 8847 阅读 · 5 评论 -
查找二叉树删除节点的操作
二叉查找树中,最复杂的操作就是删除操作。对于叶子节点,直接删除即可。对于一颗子树的节点,用子树取代原节点即可。对于拥有两颗子树的节点,首先用右子树最小的节点取代源节点,再递归删除此最小节点。具体代码如下所示:package com.Algorithm.Tree;import java.util.*;import java.io.*;/* * author:Tammy Pi原创 2012-04-18 17:37:56 · 5054 阅读 · 0 评论 -
外部排序
一般而言,讨论的排序,都是将数据读入内存之后进行的排序。不管是快速排序、堆排序、归并排序还是插入排序,耳熟能详的冒泡排序。当然,在内部排序中,效果最好的当属快速排序,虽然它在输入大致有序的情况下会有O(n*n)这样比较差的时间复杂度。稳定的排序:插入排序、归并排序;不稳定的排序:快速排序、Shell排序、堆排序。现在讨论外部排序,所谓外部排序,就是待排序的数据不能够一次性放入主存,故需多次原创 2012-04-23 16:41:03 · 997 阅读 · 0 评论 -
并查集
并查集是一种特殊的数据结构,用于判别哪些元素属于同一类别。它包括两个操作,即规约合并union以及寻找类别find。下面是一道题目:百度全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的队友信息汇报给主持人,如果A和B是队友,B和C是队友,那么A和C也是队友;接着主持人不断地随机抽取两个人,希望判断二者是否为队友。请设计一个计算机程序辅助主持人判断两个人是否为队友。对于原创 2012-04-23 20:45:46 · 576 阅读 · 0 评论 -
数的计算
题目的链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1010题目的描述: 数的计算 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:531 测试通过:162 描述 要求找原创 2012-05-21 18:30:58 · 5619 阅读 · 0 评论 -
第几天
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1008题目为: 第几天 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:899 测试通过:237 描述 在我们原创 2012-05-21 18:31:57 · 877 阅读 · 0 评论 -
SQL where树生成及树转字符串
最近要封装数据库接口,查询的关键是where条件。如何让不懂SQL的用户,通过某些接口,拼接出符合条件的SQL,成为了一个问题。不论多复杂的where,应该只包括3种类型的元素,表达式与逻辑操作符及组合元素。表达式,即形同:colname>=val,colname=val,colname like '%val%'等等的元素逻辑操作符,即or,and组合元素:即逻辑操作符+表达式,或原创 2015-04-21 00:22:30 · 2529 阅读 · 0 评论 -
POJ1014解题报告
DividingTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 43674 Accepted: 10841DescriptionMarsha and Bill own a collection of marbles. They want to split th原创 2012-04-24 21:31:11 · 2263 阅读 · 3 评论 -
BP神经网络识别手写字体
摘自于《神经网络与深度学习》mnist_loader.py#coding:utf-8import cPickleimport gzipimport numpy as npdef load_data(): f = gzip.open("F:/neuralnetwork/mnist.pkl.gz", "rb") training_data, validation_da原创 2017-03-27 18:28:37 · 4414 阅读 · 0 评论 -
验证码识别之旅(一)
当我们拿到一份验证码时,我们首先应该对它进行观察.可以看到,它的长和高分别为250和60.不过由于它内容区域的周边含有许多白色的"无效内容"区域,会对我们进行识别造成干扰,所以第一步,就是应该进行噪音数据的过滤.即将内容区域提取出来.这个验证码的无效区域为白色,而且是纯白,没有噪音数据,所以rgb会为(255,255,255).处理起来就比较容易了.我们只需要分别找出:最左原创 2017-04-29 12:05:06 · 737 阅读 · 0 评论 -
《web安全之机器学习入门》第5章K近邻算法读书笔记【上】
K近邻算法的思路:如果一个样本在空间上最近的K邻居大多数都属于M类,则该样本属于M类。在本章中,使用K近邻算法识别用户操作序列中的异常命令。分析数据集url:http://www.schonlau.net/数据集说明:50个用户的linux操作日志以User开头的文件为用户命令,总共有50个用户,每个文件记录了用户的15000条命令;其中前5000条是正常操作,而后10000条则包含部分异常操作l...原创 2018-06-24 01:21:18 · 516 阅读 · 0 评论 -
《web安全之机器学习入门》第5章K近邻算法读书笔记【下】
Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络连接等信息。待分析数据集:KDD-99数据集,链接:http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html该数据集是从一个模拟的美国空军局域网上采集来的9个星期的网络连接数据,分成具有标识的训练数据和未加标识的测试数据。数据集已经进行了数据采集、清洗、提...原创 2018-06-24 12:23:00 · 701 阅读 · 0 评论 -
《web安全之机器学习入门》第6章决策树与随机森林算法
决策树识别pop3端口扫描(原书中识别暴力破解,实际上pop3协议的并没有guess_passwd类型的数据,所以改为识别port_sweep.):待分析数据集:KDD-99数据集,链接:http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html该数据集是从一个模拟的美国空军局域网上采集来的9个星期的网络连接数据,分成具有标识的训练数据和未加标识...原创 2018-06-24 16:23:00 · 969 阅读 · 2 评论 -
《web安全之机器学习入门》第7章朴素贝叶斯模型检测webshell
N-gram算法,认为第N个词只与前面的第N-1个词相关。例如对于一个句子,I love my country.那么2-gram得到的词集为:["I love","love my","my country"]代码如下:检测webshell的第一种方式的思路为,将php webshell文件按照单词分词后(正则\b\w+\b),按照2-gram算法得到词集,从而得到文件每一行在该词集上的分布情况,得...原创 2018-06-26 20:06:36 · 1136 阅读 · 0 评论 -
sklearn使用逻辑回归
因为逻辑回归这一章实在毫无新意,而且使用ADFA-LD数据集函数调用都已经数字化了,也对实际工程没有任何帮助。所以仅贴一段示例代码:原创 2018-06-26 20:29:04 · 493 阅读 · 0 评论 -
决策树算法
1.算法介绍分类算法有原创 2014-11-04 22:15:29 · 1150 阅读 · 0 评论 -
K-means算法
1.K-means算法介绍将一组数据或记录,划分为多个组或者聚原创 2014-11-02 19:38:03 · 1262 阅读 · 0 评论 -
二分查找
package com.Test.Sort;/* * author:Tammy Pi * function:二分查找 */public class BinarySearch { public static void binarySearch(int[] a,int x,int i,int j){ if(i<=j){ int p = (i+原创 2012-09-11 09:09:23 · 650 阅读 · 0 评论 -
二叉树的递归遍历与非递归遍历
package com.Thread.Learn;import java.util.*;/* * author:Tammy Pi * function:二叉树遍历的递归实现和非递归实现 */public class BinaryTree { private Scanner scan = new Scanner(System.in); //二叉树 cla原创 2012-09-19 10:31:54 · 682 阅读 · 0 评论 -
动态规划求解最长公共子序列问题
看到不少人面试时被问了,以防万一,写一个练练手。package com.Thread.Learn;import java.util.Arrays;/* * author:Tammy Pi * function:利用动态规划的方式解答最长公共子序列 */public class LongestSubstr { //最长公共子序列的原理 //对于两个字符串A(m原创 2012-09-19 11:35:16 · 770 阅读 · 0 评论 -
背包问题和0-1背包问题
package com.Thread.Learn;import java.util.*;/* * author:Tammy Pi * function:用动态规划算法解0/1背包问题 */public class BagProblem { //0/1背包问题的解法 //背包能够放入的总容量为weight,物品有n个 //物品的价值在数组v中,物品的重量在数组原创 2012-09-19 14:36:11 · 942 阅读 · 0 评论