自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (2)
  • 收藏
  • 关注

原创 算法导论12.2-8 从任意结点使用后继函数k次的时间复杂度为O(k+h)

从任意结点使用后继函数k次,假设二叉搜索树的高度为h,则时间复杂度为O(k+h)分析从表面上来看,回溯父结点的复杂度为O(h),如果多次回溯,则总体复杂度可能远超O(k+h)再想使用数学归纳法,假设起始结点和回溯结点分别位于某个结点的左右子树,然后发现无法使用替换法证明。最后从12.2-7 中得到一丝信息,即只要证明后继函数k次后,访问结点的总次数为O(k+h)即可

2023-06-16 11:05:29 183

原创 算法导论6.3-3 证明完全二叉树高度为h的结点,其结点个数最多为[n/2^(h+1)](上取整函数)

这个问题可以使用以下几种方法进行证明:(1)使用结点高度的定义假设某结点序号为i,则其最长路径为i, i*2, i*2^2,....,i*2^h,而且I*2^(h+1) > n,于是有不等式 i*2^h而且这个证明方式不仅得到了结点个数的最大值,而且可以精确计算出某高度的结点个数,比如叶子结点个数为[n/2](上取整函数)(2)使用数

2023-06-16 11:02:58 246

原创 docker简介、安装、使用

1     简介docker官方网站,https://www.docker.comdocker文档的官方网站 ,https://docs.docker.com,有时候比较慢,请使用以下内网访问。docker文档的官方镜像docs/archive:v1.11,大家可以内网访问http://192.168.3.61:4000,由于此网站引用了google网站的相关内容,请大家务必将goog

2017-12-08 16:57:53 421

原创 docker之数据存储

1     简介docker镜像是一个只读的文件系统,容器是镜像的运行环境,即在镜像基础上再加一层可读写的层,因此所有容器中的数据写入时均写到容器中,会随着容器的销毁而消失。为确保容器可以存储数据,docker引入数据卷volume来处理此情况。volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。2     使用volume 存储

2017-12-08 16:52:09 1586

原创 docker之镜像制作

1     简介docker image,即镜像,是docker的关键元素,它是一个可读的文件系统,又是一个多层的文件系统,可以导出成一个tar包文件,也可以上传到镜像仓库供其他人下载使用。2     制作镜像2.1    基本原理docker镜像是一个多层的文件系统,制作镜像使用的Dockerfile每一行可以看作一层。所有的镜像必须基于一个最基础的镜像,目前所有镜像都是基于

2017-12-08 16:50:30 769

原创 docker之compose

1     简介对于某个应用可能会有多个容器,比如一个django项目,用到了mysql、django、redis、nginx这些容器,每个容器都有自己独特的配置,启动这些容器至少需要四条语句。为简化应用配置,docker开发了compose项目,这个东西实在太好了,只有一个可执行文件,可以随意迁移,但目前仅支持x86_64的Linux机器,docker-compose。原则上所有的生产型

2017-12-08 16:49:35 348

原创 docker之仓库管理

1     简介docker 仓库,即所谓registry,实现了镜像的管理、分发,同时还包括用户的认证。dockerregistry仓库是一个无状态的、高可靠的服务器应用程序,用来存储docker镜像。docker.io为docker官方的仓库,默认所有的pull均是从官方仓库拉取镜像。公司内部平台应用如果使用docker镜像,则必须搭建私有仓库,使用docker的官方镜像Registr

2017-12-08 16:46:50 1240

原创 python3 小技巧记录(此文档会不定期更新)

1. \x字符串转换成不要打印字符串有一个可打印的字符串,需要将\x转换成一个字节内容,最终实现很简单,仅一行,如下:src=“\x01abcd\x023456”eval "'"+src+"'"注意上文的引号,有三层,中间层为单引号,其他都是双引号,详细原因也未查明,也不想理解了,哎。描述下整个搜索过程,首先是找到的是bytes,发现没有,然后是hexlify、

2017-05-13 12:23:52 279

原创 virtualbox 内部网络桥接配置

问题现象virtualbox 内部的虚拟网络,其中有个设备是桥接(假设为设备S),即lan/wan接口是一个桥接口,但实际测试时发现此设备不能转发任何报文,即S设备lan口的机器不能上网此问题困扰了近半年时间解决方法修改设备S的lan/wan接口,确保此接口工作在混杂模式,且允许所有的报文通过,而且修改完成后设备S必须重启详细原因virtualbox 虚拟机

2016-02-16 10:05:37 3680

原创 Linux 杂项,记录Linux 下的一些点滴心得,以供参考

1. netfilter 看到的skb 报文非线性问题现象netfilter 看到的skb 报文非线性,即报文全体并不存在于skb->data 内存空间内,导致我们的应用协议处理故障详细过程使用tcpreplay 打包测试,HTTP Get请求包,发现部分报文的skb 非线性,即skb->data_len大于0,详细测试结果如下:GET 请求包大小7

2016-01-09 10:04:30 716

原创 gdb 调试网络程序发现connect 失败(interrupted system call)

问题现象直接执行程序一切正常,但使用gdb启动程序时,即使没有任何断点,发现tcp connect 总是失败,原因是(interrupted system call)。抓包发现主机会发送FIN或者RST断开这条连接。程序是一个多线程程序,而且connect的线程不是主线程。问题解决设置gdb 为non-stop 模式,如此可以完美解决set ta

2015-11-17 17:08:23 3079

原创 netfilter forward 接收到大包的问题

在netfilter 的forward上作了HOOK,但经常发现会收到非常大的数据包,很是奇怪。最后发现是网卡的GRO属性导致的,而且这个属性默认开启,很是怪异,我们这个设备主要是路由设备,使用GRO对性能提高没有任何好处,真不知道Linux kernel 如何默认关闭GRO,因此只能在设备启动时使用ethtool -K 关闭GRO,如此netfilter 收到的包就正常了

2015-07-01 09:05:32 625

原创 pppoe pppd连接不上问题

windows2003 使用raspppoe 搭建的PPPoE 服务器,用windows 自带的拨号软件直接可以连接上,但在openwrt 下使用pppd拨号,总是失败。仔细对比pppoe 的抓包发现,raspppoe服务器默认使用MPPE 加密,但openwrt 的Linux 内核默认没有支持mppe,如此导致pppd 无法协商通过,即拨号失败在解决问题过程中,尝试仅仅修

2015-06-25 11:45:43 2909

原创 linux panic 记录文件

1     设计1.1    技术使用kdump(kexec)引导第二个内核启动,在第二个内核中捕捉panic信息,同时将系统内核的内存镜像存储到/proc/vmcore文件中,由于此文件与内存大小一致,故不能直接使用此文件。使用kexec 的一个工具vmcore-dmesg,可以将/proc/vmcore转换为dmesg的信息,然后存储到文件中即可。1.2    步骤1.2.1 

2015-06-02 18:17:47 3952 2

原创 Linux 内核SMP 竞争问题

问题现象netfilter 挂一个hook,按流来处理数据包。在慢速场景下没有问题,但一旦稍微速度快些,就会发现某条流的数据包会随机的丢失、乱序问题解决使用tcpreplay 重放包测试,记录一条流的所有包的相关信息,详细查看每个包的情况,发现速率快时丢包严重,且有很严重的乱序现象。由于都同属于同一条流,刚开始没有想到SMP的问题,后来在函数入口处加锁,如此乱序问题

2015-04-30 17:06:24 635

原创 Linux 网桥模式下使用netfilter

工作中需要实现网桥模式下进行IP包过滤,即使用netfilter,发现Linux 内核已经支持,但默认没有打开,需要做如下改动:1. 确保内核编译时开启 CONFIG_BRIDGE_NETFILTER2. /proc/sys/net/bridge/bridge-nf-call-iptables 必须置为1,目前openwrt 版本默认关闭此选项导致桥接无法抓到包,需要修改/

2015-03-26 10:14:34 4684

原创 文本文件行处理,8进制数据替换成16进制

使用gawk 完成,由shell 查找所有需要处理的文件,然后通过管道送给awk处理,awk 一个文件一个文件处理,故使用了BEGINFILE 和ENDFILE 两个模式,即在文件开始处理之前生成一个临时文件,用来存储awk 处理之后输出的内容(awk 中使用重定向输出到临时文件);文件处理之后判断是否需要替换原来的文件。所有代码如下:#!/bin/awkBEGIN { FS

2015-01-09 13:37:22 854

原创 openwrt 相关知识记录

1. luci 安装 为便于调试,计划直接在x86 Linux 上安装luci环境,参考,http://luci.subsignal.org/trac/wiki/Documentation/DevelopmentEnvironmentHowTo,以下记录简要步骤以及若干问题。(1)  下载luci 源码git clone https://github.com/ope

2015-01-07 09:44:12 2057

原创 linux panic 问题定位

本文希望可以一直更新,记录下我所遇见的

2014-09-28 15:04:24 18103

原创 串口调试Linux虚拟机

串口调试Linux虚拟机背景       由于修改Linux内核,因此在调试程序时经常会导致Linux虚拟机panic,但看不到有用的panic 信息,故十分有必要看到panic 的现场信息。本文通过串口方式将信息保存下来。方式虚拟机串口1.    Virtualbox设置使用Virtualbox 自带的串口工具即可,如下图示: 启用串口1,即ttyS0,使用主

2014-09-23 14:26:57 1816

原创 ubuntu 的一些使用技巧,均全部来自互联网,记录在案,忘记时可参考

最近开始使用ubuntu,发现有很多需要

2014-09-15 09:38:44 810

原创 可到达性(算法导论22-4)

有向图G,对每个点赋值一个正整数[1 - |V|],对于V的每个点u,定义R(u)为u点可到达的点集的正整数集合,min(u)为R(u)的最小值,给出O(V+E)的算法,得到所有点的min值首先考虑一个强连通分支内各个点有相同的min值,故可以仅考虑图G的分支图,即有向无环图。然后考虑有向无环图的叶子结点,其min值即为自身值,而其父结点的min值为其所有子结点的min值和自身min值

2013-09-07 12:59:41 3010

原创 单连通图(算法导论22.3-12)

注意此处的单连通(singleconnected)指任意两个结点u,v,从u到v至多只有一条简单路径。这个问题作为上星题有难度,对于一次DFS来讲,如果存在forward edge则表明必定不是单连通图,但还要考虑cross edge,如果在一个DFS树来讲只要存在cross edge,就表明不是单连通,关键是要处理不同DFS树间的cross edge还有back edge。 最简单的实现

2013-09-04 21:17:21 13908 2

原创 强连通分支之Tarjan 算法

比Kosaraju算法更神奇,只需要一次DFS就可以获得强连通分支。其原理是每一个强连通分支,均包含在DFS树的某个子树中,只要找到这个子树的树根,再逐一将该连通分支所有结点取出即可。数据结构:1)        栈,DFS访问结点时入栈,某个强连通分支访问结束后其所有结点出栈,以下需要证明当刚好访问结束某个强连通分支时,其所有结点均在栈顶;2)        数组dfn,DFS过程中

2013-08-30 18:06:23 1593

原创 强连通分支及kosaraju算法

图论中最重要的结构,很多图论问题都可以转化为强连通分支来降低处理复杂度。一个强连通分支中所有的点都是互相连通的,可以将其收缩为单个点,以此来简化图的处理。强连通分支中的点集合是一个最大集合,即再加入任何一个其他点都会导致不连通。 引理1:图G的两个强连通分支C、C’,如果存在点u属于C,u’属于C’,使得(u,u’)为G的一条边,则一定不存在另一条边(v’,v),使得v’属于C’,v属于C

2013-08-28 08:24:55 2595

原创 欧拉回路问题(算法导论22.2-8 和22-3)

22.3 欧拉回路的算法来自1873年的Hierholzer,前提是假设图G存在欧拉回路,即有向图任意点的出度和入度相同。从任意一个起始点v开始遍历,直到再次到达点v,即寻找一个环,这会保证一定可以到达点v,因为遍历到任意一个点u,由于其出度和入度相同,故u一定存在一条出边,所以一定可以到达v。将此环定义为C,如果环C中存在某个点x,其有出边不在环中,则继续以此点x开始遍历寻找环C’,将环C、C’

2013-08-24 14:19:44 9496

原创 算法导论22.5-7 给出一个算法确定一个有向图是否为半连通

半连通的定义,有向图G(V,E),任意两个不同的点u、v,u有一条路径可达v或者v有一条路径可达u,从定义中可以看出,强连通图一定是半连通的。引理:有向无环图G(V,E),G是半连通的当且仅当有一条路径,这条路径上有图G中所有点。证明:充分性很显然,如果有这样一条路径,则任意两个点之间都有一条路径。必要性,有向无环图,可以对其进行拓扑排序得到一个拓扑序列,拓扑序列中任意两个相邻

2013-08-16 08:15:30 5616

原创 拓扑排序

拓扑排序只针对于有向无环图,它是所有结点的一个线性序列,确保如果有边(u,v),则结点u一定在v前面。引理:有向图有环的充要条件是DFS存在back edge。证明:充分性很好证明,当DFS存在back edge时,比如(v,u),又由于可以沿DFS找到u到v的路径,则找到一个环u=>...=>v=>u;必要性证明,考虑有向图中的某个环u=>...=>v=>u,不失一般性可以假设DFS

2013-08-15 12:53:03 1142

原创 DFS 及其相关证明

DFS 对个人来讲真是个奇怪的遍历算法,但最后再仔细看来却是相当重要的算法,难怪在CLRS的chapter notes中讲到由Hopcroft和Tarjan首先意识到DFS的重要性,记住Tarjan这个人,他在图论上有着相当大的贡献,而且首次引入了amortized analysis(分摊分析),这两位同时获得了图灵奖。DFS如此重要,以下几乎全翻译自CLRS,包括部分习题的解答。 顾名思

2013-08-12 08:24:51 2683

原创 有向无环图两点之间的路径数目(算法导论22.4-2)

有向无环图G=(V,E),求其点s和e之间的路径数目。此题首先要以点s开始作DFS,得到从s为起点的所有可达点的一顶DFS树,但这个路径数目需要详细参详。定义P(x),表示点s到点x的路径数目,P(s)=1,即s到自身有一条路径,其余的所有路径数目都初始化为0。路径从s到达点x,则必须到达x的上一层结点,假设以x为终点的上一层结点有n个,即a1,a2,...,an,由加法定律可知P(x)=

2013-08-01 09:47:39 11402

原创 BFS 最短路径证明及实现

BFS最短路径感觉是显而易见的,但证明却颇费工夫,以下证明大部分摘自CLRS,使用倒序形式进行证明比较好理解。首先需要证明一条引理,即BFS中所有点的d值按照入队列成升序排列,即d(s)  1. BFS得到的是一条路径,即从起始点s到任意一点v的路径d(v),因此它必定大于等于最短路径δ(s,v),即有d(v) >=δ(s,v) 2. 以下只需要证明d(v)>δ(s,v)情况不存在

2013-07-27 10:08:47 7160

原创 判断一个图是否为二分图且输出结点二分的两个部分(算法导论22.2-6)

这题实际上是判断图是否为二分图,可以假设此图为连通图(非连通图时对其各个连通分支作相同操作即可)。二分图的充要条件是“所有环路的长度均为偶数”,刚开始我也从这方面着手,努力证明如果此图有环路,则环路长度不可能为奇数,继而发现此路不通,而且如果为二分图还要输出结点的两个部分,这种方法比较困难,使用以下方法证明。对任意一个结点使用BFS,BFS树的根结点设置为红色,与根结点距离为奇数的点设置为

2013-07-19 18:09:49 2549

原创 两次BFS求树的直径(算法导论22.2-7)

以任意点w开始,先做一次BFS,找到最远的点v,然后再以此点v进行一次BFS,找到最远的点为u,u到v就是树的直径。 此问题的关键不是在编程,而是要证明,网上也找了很多资料,没有看到证明,以下是个人的证明方法。 首先要知道树是没有环路的连通图,任意两点都有一条通路,而且也只有一条通路。同时假设树的一条直径为u到v的路径,记为d(u,v)。分情况讨论:(1) 假设起始点w正好

2013-07-15 09:08:32 5892

原创 职业、人生的动态规划?

曾几何时,幻想过可以从事多个职业,可到如今单个职业也已经很不容易了。但人的天性如此,职业病就是其一,人就是喜欢从事各种活动 做专业运动的,身体运动过度导致生病;不运动的,身体很少锻炼导致生病; 老师由于过度站立导致下肢生病;坐办公室的由于久坐也会导致下肢生病;司机由于久坐低头导致颈椎生病;搬运工由于过度搬运导致腰部生病; 真是过犹不及啊,人身体的每个部位,即

2013-07-12 17:59:34 985

原创 互素数不能表出的最大数(源自动态规划题:麦香牛块)

原题如下:农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块。奶牛们正在想尽一切办法让这种可怕的设想泡汤。奶牛们进行斗争的策略之一是“劣质的包装”。“看”,奶牛们说,“如果你用只有一次能装3块、6块或10块的三种包装盒装麦香牛块,你就不可能满足想要一次只想买1、2、4、5、7、8、11、14或17块麦香牛块的顾客了。劣质的包装意味着劣质的产品。”你的任务是帮助

2013-07-12 17:21:05 2162

原创 n个点的简单无向图没有长度为3的环,求其最大的边数

原题描述:在一个未来的空中都市中,有很多个小岛(城区)。现在要求在这些岛之间架一些桥梁(桥是架在两个岛中间的)。要求:首先,如果A与B中间有桥,B与C之间有桥,则A与C之间就不能再架桥了,即对于城市中的任意三个岛,不能在其中两两都架上桥。在这样的前提下,要求架的桥数最多,并计算其中的一个可行方案。 此题在网上可以搜索到答案,桥数最多时为二分图。但没有给出有力的证明。以下简要证明之。

2013-07-04 16:25:14 3366

原创 动态规划之整齐打印

考虑在一个打印机上整齐地打印一段文章的问题。输入的正文是n个长度分别为L1、L2、……、Ln(以字符个数度量)的单词构成的序列。我们希望将这个段落在一些行上整齐地打印出来,每行至多M个字符。“整齐度”的标准如下:如果某一行包含从i到j的单词(i 乍一看以为是空格个数和,如此可以使用“贪心算法”求解,即从第一行开始尽可能多的放置单词,可以证明这个“贪心解”也是最优的,假设有一个最优解从某行开

2013-07-03 16:51:43 4310 2

原创 单调队列之烽火传递问题

烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上。一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情。在某两座城市之间有n个烽火台,每个烽火台发出信号都有一定的代价。为了使情报准确的传递,在m个烽火台中至少要有一个发出信号。现输入n,m和每个烽火台发出的信号的代价,请计算总共最少需要话费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确的传递。 例如

2013-07-01 10:07:39 2439 2

原创 单调队列之广告印刷问题

问题:有n幢建筑,其高度分别为H1,...,Hn,其宽度为1,且这些建筑紧靠在一起,当前需要在这些建筑上刷一个非常大的矩形广告,求矩形广告的最大值。 先翻译成数学题,给定n个正数的序列,定义区间值A(i,j)= Min(Hi,Hi+1,..,Hj) * (j-i+1),求所有区间值的最大值。这个问题网上都有答案,无奈答案一律都相当简单,个人实在无法理解,故成此文!(1) 最简单

2013-06-29 17:04:24 1954

原创 背包问题练习之货币系统

【问题描述】母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。[In their own rebellious way],他们对货币的数值感到好奇。传统地,一个货币系统是由1,5,10,20或25,50和100的单位面值组成的。母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。举例来说,使用一个货币系统{1,2,5,10,…}产生18单位面值的一些可能的方法

2013-06-29 16:24:21 2222

算法实验代码(大部分是CLRS的习题和原题)

大部分是CLRS的习题和原题 还有部分是网友的习题

2013-07-04

二叉树遍历

详尽的树遍历文档,将树遍历一网打尽,值得参考

2013-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除