03 2014 档案

摘要:题意:FJ希望它的牛做一些清洁工作。有N只牛和T个时间段,每只牛可以承担一段时间内的工作。FJ希望让最小数量的牛覆盖整个T,求出其数量。若无法覆盖整个T,则输出-1.分析:首先要注意T表示T个时间段,也就是说1就是一个时间段,而[1, 2]是两个时间段。在这个问题上,我们要做到的是用最小的牛覆盖整个区间。比较容易想到的是先将牛按开始时间排序,因为如果一开始就覆盖不了那么后续就没有意义可以直接输出-1。贪心选取在满足当前开始时间的前提下,其结束时间的大的牛,因为在满足开始前提下,当然是覆盖得越多越好。可以简单设想如果可以用一只覆盖得比较小的牛来做到最优结果,那么用覆盖得最大的必然也是最优结果。  阅读全文
posted @ 2014-03-18 08:48 7hat 阅读(374) 评论(0) 推荐(0)
摘要:题意:有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示)。一次可将同一行或同一列的煎饼全部翻转。现在需要把尽可能多的煎饼翻成正面朝上,问最多能使多少煎饼正面朝上? 输入:多组输入,每组第一行为二整数r, c (1 ≤ r ≤ 10, 1 ≤ c ≤ 10 000),剩下r行c列表示煎饼初始状态。r=c=0表示输入结束。 输出:对于每组输入,输出最多能使多少煎饼正面朝上。(翻译参考自:http://bbs.byr.cn/#!article/ACM_ICPC/73337?au=Milrivel)分析:这个是二维的穷举,因为列数比较多行数比较少,所以可对行做深度 阅读全文
posted @ 2014-03-17 16:22 7hat 阅读(483) 评论(0) 推荐(1)
摘要:题意:给定一个5*5的地图,每个格子上有一个数字。从一个格子出发(上下左右4个方向),走5步将数字连起来可以构造出一个6位数。问该地图可以构造出多少个不同的6位数。分析:可以对每个格子做深度优先遍历,构造出所有数字,但要注意不要重复计数。在这里,我使用了set来保存已构造出的数字,结果就是set中的元素个数。 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 //输入 8 int a[5][5]; 9 10 set st; //保存已构造的数字11 12 const int dx[... 阅读全文
posted @ 2014-03-16 19:18 7hat 阅读(1065) 评论(0) 推荐(0)
摘要:SDN的基础理论部分学得差不多,剩下就是搭建环境来做了。暂时还不想做,忽然想看看什么是云计算,所以买了这本书。 第一章主要是简介,没有什么理论知识,但可以对云计算有一个初步概念。 首先要说的是CSA(Cloud Security Alliance)提出的云计算定义:云计算的本质是一种服务提供模型,通过这种模型可以随时、随地、按需地通过网络访问共享资源池的 资源,这个资源池的内容包括计算资源、网络资源、存储资源等,这些资源能够被动态地分配和调整,在不同用户之间灵活地划分。 接下来是NIST提出的云计算架构图,相当全面。网上没找到相关图片,自己做了一幅。。 IaaS(Infrastru... 阅读全文
posted @ 2014-03-15 11:18 7hat 阅读(861) 评论(0) 推荐(0)
摘要:题意:已知有N个数分别为1-N,如下图为4个数。相邻两两相加直至只剩下一个数,下图的结果就是16。 3 1 2 4 4 3 6 7 9 16 现在反过来看,告诉你数的个数N和最终结果,问这N个数的初始序列是什么。求出字典序最小的初始序列。上图的初始序列也可以是3 2 1 4,但这不是字典序最小。分析:这题用全排列的方式非常容易做。首先初始化数组为1-N,然后用STL提供的按字典序生成全排列的函数next_permutation即可枚举全排列。对于每一组数,通过计算可以知道它是否能得出已知结果。最先找到的那组数就是字典序... 阅读全文
posted @ 2014-03-15 09:54 7hat 阅读(313) 评论(0) 推荐(0)
摘要:题意:给定一组数字,如0, 1, 2, 4, 6, 7,用这些数字组成两个数,并使这两个数之差最小。求这个最小差。在这个例子上,就是204和176,差为28。分析:首先可以想到,这两个数必定是用各一半数量的数字组成的数,如给出6个数,把这6个数分为两组,每组3个,这样组成的数字的差必定比其他方式小。接下来的任务就是穷举所有可能出现的组合,并求出最小差。在这里可以使用STL的next_permutation函数来求给定这组数字的所有排列,并将其分为两组组成数字,然后记录最小差。需要注意第一个数位不能为0。 1 /* 2 input: 3 1 4 0 1 2 4 6 7 5 output: 6 2 阅读全文
posted @ 2014-03-14 10:11 7hat 阅读(379) 评论(0) 推荐(0)
摘要:在学习的过程,由于很多命令平时都用不着,因此做这个索引方便需要时查找。这包括了前两部分。主要是按页码顺序。P118 date:显示日期与时间 cal:显示日历 bc:计算器P121 [Tab]:命令补全或文件补全 [Ctrl]-c:强制中断 [Ctrl]-d:EOF或exitP123 man:操作说明P127 info:与man类似,但显示方式不同P130 nanp:简单文本编辑器P132 sync:数据同步写入硬盘 shutdown:关机 halt:关机 poweroff:关机 reboot:重启 init:切换执行等级P144 chgrp:改变文件所属用... 阅读全文
posted @ 2014-03-13 16:05 7hat 阅读(312) 评论(0) 推荐(0)
摘要:近期尝试将一些东西写成博文发出来,新的旧的也写写,整理一下思路。另外,将不会再更新《SDN核心技术剖析和实战指南》的读书笔记,基础部分也写得差不多了。 大三下学期了,努力做点事情。 阅读全文
posted @ 2014-03-13 09:27 7hat 阅读(117) 评论(0) 推荐(0)
摘要:这一节主要是介绍几种开源的SDN控制器。 NOX/POX。最初的NOX混合了C++和Python两种编程语言,现在演变为两个版本。NOX版本主要面向Linux平台,利用C++开发,目标是提供快速的控制平台;POX版本面向Windows、Mac OS、Linux等多种平台,利用Python开发,目标是提供控制器部署的便利性。两者可以看作是同一种控制器。 NOX采用了组件化的架构,可分为核心组件和应用组件。核心组件是用于和网络直接打交道的底层接口;应用组件既包括NOX本身提供的组件,也包括第三方扩展的组件(包括用户)。与SDN相关的组件包括以下几种:Discovery组件:用于链路发现;T... 阅读全文
posted @ 2014-03-13 09:23 7hat 阅读(574) 评论(0) 推荐(0)
摘要:题意:7数码问题。在2×4的棋盘上,摆有7个棋子,每个棋子上标有1至7的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(用0表示),与空格相邻(上下左右)的棋子可以移到空格中,该棋子原先位置成为空格。给出一个初始状态(保证可以转移到最终状态),找出一种从初始状态转变成给定最终状态的移动棋子步数最少的移动步骤。输入:多组输入,每组8个数,表示初始状态前四个数为第一行从左到右,后四个数为第二行从左到右。输出:至少需要多少步可以从输入状态到达最终状态(0 1 2 3 4 5 6 7)(题意翻译参考自http://bbs.byr.cn/#!article/ACM_ICPC/73337 阅读全文
posted @ 2014-03-13 08:33 7hat 阅读(707) 评论(0) 推荐(0)
摘要:在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口。从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力。下面逐一描述。 南向网络控制技术主要包括通过南向接口协议进行链路发现、拓扑管理、策略制定、表项下发等。链路发现和拓扑管理主要是控制器利用交换机上报的信息进行同一管理(上行),而策略制定和表项下发则是控制器向交换机发送控制信息从而实施同一控制(上行)。 SDN控制器主要使用LLDP(Link Layer Discovery Protocol,链路层发现协议)作为链路发现协议。该协议可将设备的能力... 阅读全文
posted @ 2014-03-12 11:18 7hat 阅读(1673) 评论(0) 推荐(1)
摘要:题意:巨大流星雨即将袭来。每个流星会对击中的地方以及周围(上下左右四格)造成破坏。Bessie开始时位于(0, 0)位置,并希望逃到一处不会被袭击到的地方(在第一象限内)。已知每移动一格需要1个时间单位,被流星破坏后的地方不能再进入。给出M个流星在T时刻击中的地方(X, Y),问Bessie能否逃到安全的地方,若能输出最短时间,否则输出-1。分析:依旧是迷宫问题。不同的是,需要自己构建出迷宫。首先将maze的所有格初始化为INF,表示这个格子被袭击的时间为INF(即永远不会被袭击)。对于每一个流星,将其影响反映到maze上,如果破坏范围由重叠,那么格子显示的是较早的破坏时间(因为一旦破坏了就不 阅读全文
posted @ 2014-03-12 09:37 7hat 阅读(2030) 评论(0) 推荐(0)
摘要:Open vSwitch(OVS)是一款基于软件实现的开源交换机。它能够支持多种标准的管理接口和协议以及跨多个物理服务器的分布式环境。特别地,OVS提供了对OpenFlow协议的支持,并且能够与众多开源的虚拟化平台相整合。 (参考Open vSwitch官网:http://openvswitch.org/) 如上图所示。OVS两端连接着一块物理网卡和多块虚拟网卡(虚拟机中的网卡),在OVS的维护一个映射表,根据MAC地址来映射到对应的VM链路从而完成数据的转发,从某个角度上看,这可能有点像NAT的功能。值得注意的是,提供OpenFlow支持的OVS是根据自身保存的流表来对数据包进行匹配... 阅读全文
posted @ 2014-03-11 16:33 7hat 阅读(1254) 评论(1) 推荐(1)
摘要:OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持。如下图所示,OF-CONFIG在OpenFlow原来的框架上,新增了OpenFlow配置点对交换机进行配置和管理。(图摘自《SDN核心技术剖析和实战指南》) OF-CONFIG对一些交换机的基本功能进行了配置,如控制器的IP地址,设备的队列与端口等资源以及支持远程修改设备的端口状态等。另外,还有其他一些可配置的参数,但我认为在学习理论的时候并不需要强记这些东西,到了实践的时候真正用到就会记得。现在只需要记得,... 阅读全文
posted @ 2014-03-11 16:07 7hat 阅读(625) 评论(0) 推荐(0)
摘要:题意:在 H * W 的地图里有 N 个工厂,每个工厂分别生产硬度为1-N 的奶酪,有一只老鼠准备把所有奶酪都吃完。老鼠的初始体力值为1,每吃一个奶酪体力值加 1。已知老鼠不能吃硬度大于当前体力值的奶酪,老鼠只能向上下左右四个方向走,求吃完所有奶酪老鼠需要经过的最小步数。分析:简单迷宫问题。不同的是,老鼠需要按1-N 的顺序把奶酪吃完。用广度优先搜索很容易求出起点到终点的最小步数。初始时,求起点到硬度值为 1 的奶酪的最小步数;接着将起点重置为此位置,继续求此位置到达硬度值为 2 的奶酪;如此类推。因此这里只需做N 次广度优先搜索,并累计其值即可。C++代码: 1 #include 2 #i. 阅读全文
posted @ 2014-03-11 15:37 7hat 阅读(342) 评论(0) 推荐(0)
摘要:这节的内容相当多,主要是介绍OpenFlow标准特别是流表的相关特性。 典型的OpenFlow标准由三部分组成:安全通道,流表和OpenFlow协议。注意这个标准是一份设备标准,并不单指OpenFlow协议。后来引入了流水线式的多流表以及组表(Group Tabel)。 (图摘自SDNAP的文章) 安全通道是交换机与控制器进行通讯的接口,在实现上推荐使用(在缺省情况下就是)TLS用来保证认证性和数据隐私。而OpenFlow协议是用来描述控制器和交换机之间交互信息的接口标准。OpenFlow协议支持三种类型的信息:controller-to-switch(控制器到交换机)、asynch... 阅读全文
posted @ 2014-03-10 17:55 7hat 阅读(1167) 评论(1) 推荐(1)
摘要:问题:打冰球。冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失。当冰球紧贴墙时,不能将冰球往那个方向打。冰球出界就当输,超过10次还没将冰球打到目标位置也当输。求用最小次数将冰球打到目标位置,或输出-1表示输了。分析:一般来说,求最小步数之类的迷宫问题都是用BFS解决的,但这题涉及到迷宫状态的变化(墙),BFS要不断记录状态的变化很复杂,不过网上好像也有人用BFS做的。DFS更加适合这种状态一直变化的,只不过要保存最优值而已,其实最优值也方便剪枝(当前步数已经是当前最优值大小但还没到达目的地也就没必要进行下去了)。需要注意的是,这题并不是移动一格,而是一直移动直到遇到障碍 阅读全文
posted @ 2014-03-10 16:33 7hat 阅读(1477) 评论(0) 推荐(0)
摘要:对于SDN交换机的技术,其实也适用于传统的交换机,只不过控制部分被分离出来而已。传统交换机的控制面主要是转发表的管理以及网络状态之类的各种表,现在这些都由控制器来担心。转发面主要由转发决策、背板和输出链路调度组成。 转发决策是指数据包从输入端口进入交换机后,接下来怎么办。在SDN架构上,就是查询流表。 背板是指作出决策后数据包到达输出端口所经过的地方。主要由两种背板设计方式,一是共享总线型,发往不同端口的数据包共享总线来传输,这个比较容易冲突,类比下以太网;二是交叉开关矩阵型,就是不同的输入端口与输出端口之间存在多条通路,可以类比一下矩阵。 输出链路调度是指在数据包到达输出端口后,需要排队输. 阅读全文
posted @ 2014-03-09 20:40 7hat 阅读(510) 评论(0) 推荐(1)
摘要:题意:按给定顺序从A口放标号位1-10的10个球,利用挡板可以使球落到B或C,问能否使B和C里的球标号从下往上递增。分析:对于第 i 个球,若a[i]大于B口上方的球,则可放入B口;若a[i]大于C口上方的球,则可放入C口。利用深度优先搜索,选取合适的操作,若能按要求放完10个球,则成功。若所有情况都不能,则失败。C++代码:/*input:23 1 4 2 5 6 7 8 9 1010 9 8 7 6 5 4 3 2 1output:YESNO*/#include int a[10];bool dfs(int k, int B, int C){ if(k == 10) return t... 阅读全文
posted @ 2014-03-09 20:17 7hat 阅读(310) 评论(0) 推荐(0)
摘要:日文题。。。题意:一个面积为H*W的果园,种了苹果,梨和蜜柑。相邻(上下左右)的果树属于同一个区域,问果园共有多少个区域。分析:迷宫问题。对于每一个格子,可以用深度优先搜索把相同果树的格子遍历并标记。也就是说,每做一次DFS,消灭掉一个区域。只需要遍历果园,对每一个未被标记的格子做DFS,做DFS的次数就是果园的区域数。这里不需要另外用其他数组标记格子已访问,只需要将格子的元素改为一个不会出现的元素如1即可。C++代码: 1 #include 2 #include 3 4 const int MAX_H = 100; 5 const int MAX_W = 100; 6 7 //输入 ... 阅读全文
posted @ 2014-03-07 10:36 7hat 阅读(645) 评论(0) 推荐(0)
摘要:第一章主要是概况。新技术有一个特点是,每家都有不同的说法。这里我只说说我比较认同的部分。 SDN的核心概念大概有两个:转发面与控制面分离、开发可编程化。书里还说逻辑上集中控制,其实这个就可以从转发与控制分离推出;至于说到网络虚拟化,我看这只是其中一个结果吧。 ONF的SDN架构分为三层:应用层、控制层和基础设施层。与其他架构不同的是,它的南向接口规定是OpenFlow,不过我想很难统一化。北向接口因为与业务的关联比较大,因此也没什么标准可言。OpenDayLight的架构非常庞大,基本上包括了ONF的三层,南向接口支持多种协议,北向接口支持现在比较流行的REST API。 S... 阅读全文
posted @ 2014-03-07 10:20 7hat 阅读(567) 评论(0) 推荐(0)
摘要:题意:有红色和黑色的格子,只能走黑色的,问从起始位置出发,最多能走到达多少块黑色格子。分析:相当于走迷宫,黑色格子是路,红色格子是墙,每次到达一个未到达过的格子时计数,原点也算是一个。每次可以走上下左右四个方向,用深度优先遍历从原点起始,一直到遍历所有能到达的格子。需要注意的是,不要重复走同一个格子,可以采取数组标记已走过的格子,但这里只需简单将已走过的格子标记为红色就可以达到目的,因为红色的格子也不可走。C++代码: 1 #include 2 3 const int MAX_W = 20; 4 const int MAX_H = 20; 5 6 //输入 7 int W; 8 int ... 阅读全文
posted @ 2014-03-06 08:24 7hat 阅读(473) 评论(0) 推荐(0)
摘要:SDN(软件定义网络),顾名思义,通过软件来控制或驱动整个网络。SDN的核心概念有两个,第一是转发面与控制面的分离;第二是开放的可编程接口。另外,SDN强调集中式控制,通过软件来控制整个网络,但这并不意味着只有一个Controller,在大型网络中,更多是使用分布式Controller的架构来管理,如Onix。 SDN是一个部署网络的框架,并不是具体的某个技术,更不是OpenFlow。OpenFlow协议只是Switch和Controller用来通信的应用比较广泛的一个协议,还有其他一些协议。 NV(网络虚拟化)不是SDN。网络虚拟化是指利用Tunnel技术将虚拟机连接起来实现一个运行在... 阅读全文
posted @ 2014-03-06 08:08 7hat 阅读(1315) 评论(0) 推荐(0)