笔记
happen_zhang
想要过什么样的生活你自己决定
展开
-
不断减少时间复杂度的一个例子
问题:给出N张写有数字(k1, k2, ..., kn)的牌 和 一个数字M, 从中抽4次(每抽完一次要放回), 判断是否存在抽取4次牌上数字的和为M的组合是否存在。 1 输入:n = 3, m = 10, k = {1, 3, 5} n = 3, m = 9, k = {1, 3 , 5} 输出:yes(原创 2013-09-11 09:39:33 · 2160 阅读 · 0 评论 -
[php]应用控制器(二)
为了能更清晰地了解应用控制器总体实现的结构,代码中需要使用到的类都已经在之前实现了,现在只剩下的是核心的部分:AppController和Controller。namespace demo\controller;/** * Controller */class Controller { private $appHelper; private function __cons原创 2013-10-12 00:24:22 · 1641 阅读 · 0 评论 -
最大流 Ford-Fulkerson算法
最大流和割的关系: 定理一:如果f是网络中的一个流,CUT(S,T)是任意一个割,那么f的值等于正向割边的流量与负向割边的流量之差。 证明: 设X和Y是网络中的两个顶点集合,用f(X,Y)表示从X中的一个顶点指向Y的一个顶点的所有弧(弧尾在X中,弧头在Y中:XY)的流量和。 只需证明:f=f(S,T)-f(T,S) 即可。下原创 2013-09-27 20:20:56 · 1329 阅读 · 0 评论 -
后缀数组的实现和字符串匹配
字符串后缀:从字符串的某个位置开始到字符串末尾的子串。 后缀数组:指将某个字符串的所有后缀按照字典序排序后得到的数组,但数组并不直接保存后缀字符串,只保存对应的其实位置。 S[]="suffixarray"的后缀数组sa[]isa[i]S[sa[i]...]011'\0'(空串)16array原创 2013-09-28 20:25:36 · 2352 阅读 · 0 评论 -
[php]领域模型和数据映射器
业务逻辑层使用的是领域模型,因为它能使用数据映射器中的大部分模式。 “万物皆对象”,领域模型就是对于项目中各种个体的抽象表达,就是一个类。它常常被描述为一组属性及附加的操作。它们是做某些相关事的某个东西。 领域模型的复杂性主要来自于尝试使模型纯粹(pure),即将领域模型从应用中其他层中分离出来。把领域模型的参与者从表现层分离出来不难,但将这些参与者从数据原创 2013-10-16 00:25:34 · 3127 阅读 · 1 评论 -
[php]Collection和持久化工厂
Mapper类中的findById($id)可以从数据库中取出指定id的一条数据,映射成一个对象返回。很多时候我们需要返回一个数据集合(findAll),那我们就需要一种数据结构来保存这些数据,在需要时映射成对象。既然一条数据映射成一个对象,那么一个数据集合就需要一个对象集合。可以把数据集合和对象集合放在一个类中,这样就方便处理数据到对象的映射了。我们把这个类命名为Collection,为了能更好原创 2013-10-20 00:38:00 · 2154 阅读 · 0 评论 -
[php]标记映射和工作单元
标记映射 系统中可能存在两个值相同,但又不是同一个引用的对象,这样的重复对象可能是从数据库中读出来的,这样就造成了不必要的查询。 标记映射是一个类ObjectWatcher,它负责管理进程中的领域对象,以保证进程中不出现重复对象。 标记映射可以防止重新读取数据库查询数据,只有当ObjectWatcher类中不存在标记映射对应的对象时才去查询数据原创 2013-10-23 23:13:55 · 1407 阅读 · 0 评论 -
[php]延迟加载和领域对象工厂
延迟加载 延迟加载是一个用于避免过多数据库查询的极为重要的机制,大部分web应用都需要注意对大量数据的操作和查询,所以延迟加载还是很有必要学习的。 在之前我们的建立的数据表和例子可以知道,每个Classroom对象可能包含多个Student对象,而每个Student对象又有可能和更多的Score类进行关联。那么,当从数据库中取出一个Classroom对象的时候,原创 2013-11-22 17:12:43 · 3114 阅读 · 0 评论 -
[php]标记对象
在Mapper中查找一个对象(findById)或者查找所有相关的对象(findAll())很简单,但要查找符合特定条件的对象时就需要创建特定的SQL语句来实现查询了。 比如查找user表中score大于10,查找user表中age等于18的Sql语句:SELECT * FROM `user` WHERE score > 10;SELECT * FORM `user` WH原创 2013-11-23 18:00:29 · 1393 阅读 · 0 评论 -
[php]选择工厂和更新工厂模式
任何需要和数据库打交道的系统都需要使用Sql,但系统本身是由领域对象和业务规则而不是数据库组成的。这里介绍的选择工厂和更新工厂模式可以为树状的领域结构和表格式的数据库之间搭建一座桥梁。在将领域数据转换为数据库可以理解的格式时,我们需要进行解耦。 之前可以看到标记对象(IdentityObject)模式所带来的好处,它能更加动态地生成查询语句,因为各种查询条件组合的可能性非常多。原创 2013-11-26 19:03:25 · 1292 阅读 · 0 评论 -
[php]应用控制器(一)
前端控制器已经能很好地在一个地方集中处理请求并选择适当的Command了,但是Command子类对象自己处理了视图的分配工作。要是能够使用一个类(根据Command处理后返回的状态值)来决定视图并返回到前端控制器,再由前端控制器来调用视图显示,这样的话前端控制器就处于视图层和业务层的中间了,而且也很好地把Command和视图分开了。应用控制器是个好的解决方案。 应用控制器负责映射原创 2013-10-11 00:21:26 · 2565 阅读 · 0 评论 -
反复推进区间开头和末尾, 求解最小区间
给出一个n个整数的序列,求出最小的连续序列长度,使得ai + a(i+1) + ... + a(t)的和不小于S。 (1 比如: 输入 n = 10, S = 15, a = {5, 1, 3, 5, 10, 7, 4, 9, 2, 8} 输入 n = 5, S = 11, a = {1, 2, 3, 4, 5}原创 2013-09-15 16:56:38 · 858 阅读 · 0 评论 -
LCP数组的实现和最长公共连续子串
LCP数组(Longest Common Prefix Array, 高度数组):是由后缀数组中相邻两个后缀的最长公共前缀的长度组成的数组。 假设字符串S, 后缀数组sa, LCP数组lcp, 那么有后缀S[sa[i]...]与S[sa[i + 1]...]的最长公共前缀的长度为lcp[i]。 lcp的计算: (后缀数组的实现)假设S[i...]与S[sa[ra原创 2013-09-29 21:24:21 · 4800 阅读 · 0 评论 -
优先队列的实现
STL中有priority_queue可以实现优先队列。 下面的代码是小堆哦,是从小到大的顺序。#include #define MAX_N 2001int heap[MAX_N];int size;void push(int x) { int i = size++; int p; while (i > 0) { p = (i - 1) / 2;原创 2013-09-18 08:25:06 · 686 阅读 · 0 评论 -
Bellman-Ford最短路径和负圈判断
Ballman-Ford的最短路径算法是以边为单位进行的,而Dijkstra则是以顶点为单位进行的啦。 Ballman-Ford算法需要遍历所有|E|条边,最坏的情况下需要遍历|V - 1|*|E|条边,所以可以借助这个特点来判断图是否有负圈哦。 Ballman-Ford能够解决带有负圈的图。 时间复杂度为O(|E|*|V|)。#inc原创 2013-09-18 10:10:25 · 1610 阅读 · 0 评论 -
二叉搜索树的实现
二叉搜索树的删除: (1)、没有左孩子,直接把右孩子替代删除结点 (2)、有左孩子但左孩子没有右孩子,则把左孩子替代删除结点 (3)、其它,把左孩子的最大的结点替代删除结点 时间复杂度O(logn)#include #include struct node { node* left; node* right; in原创 2013-09-18 18:47:13 · 780 阅读 · 0 评论 -
[php]架构模式回顾
一直想把以前学过的知识写到博客上,由于太懒,时间久了也就忘得差不多了。这次国庆回家有时间能写点了,也算是给自己复习吧。对于编码写业务,我更喜欢花时间在架构设计上。我在这里面学到了比较多的东西,遂作企业架构模式笔记以加深印象。 PHP是一种为Web开发而设计的语言,在PHP5之后,PHP不断完善对面向对象的支持而且也提供了新的特性,那么这样的话PHP就能像JAVA那样享受设原创 2013-10-03 20:44:11 · 1050 阅读 · 0 评论 -
[php]提供可全局访问的数据
PHP变量作用域:作用域通常用来描述代码结构中对象或者值的可见程度。PHP的变量作用域有三个级别,1)标准级别是指一个HTTP请求从开始到结束的周期。2)PHP内置了对会话变量Session的支持。在一次请求结束后,会话变量会被序列化并存储到文件系统或者数据库中,然后在下一个请求开始时取回。存放在cookie中的会话ID和通过查询字符串传递的会话ID被用于跟踪该会话的拥有者。3)在Java中有一个原创 2013-10-05 20:51:52 · 1232 阅读 · 0 评论 -
对字符序列循环向左(右)移动的技巧
给出一个字符序列S,求对S向左(右)循环移动i后的字符序列。 比如:S = abcdefg, i = 3, 则操作完成后S = defgabc (向右同理哦) 技巧:假如S = abcdefg, i = 3, 那么可以进行如下操作: 1) 对S的前i个字符进行翻转, 对于上例,则可以得到 abc => cba 2) 对S中i以原创 2013-09-28 18:40:28 · 1999 阅读 · 0 评论 -
[php]前端控制器
当一个请求达到系统时,系统必须能够理解请求中的需求是什么,然后调用适当的业务逻辑进行处理,最后返回相应结果。对于简单的程序,整个过程可以放在视图中,但随着系统的增长,这种处理方式不能很好地满足请求、调用业务逻辑和显示适当视图。那么我们就需要在较大的系统中较好地管理这三者的关系,我们可以划分出视图层与命令和控制层。 视图层与命令和控制层之间的界线通常比较模糊,又是也把这两个层称为表原创 2013-10-09 00:06:17 · 7064 阅读 · 0 评论 -
分桶法和平方分割(对区间的操作)
分桶法:把一排物品或者平面分成桶,每个桶饭分别维护自己的内部信息,以达到高效计算的目的的方法。 平方分割:把一排n个元素中每√n个元素分在一个桶内进行维护的方法,使对区间操作的时间复杂度降为O(√n)。 类似线段树哦。 给定一个n个整数的数列a1, a2, a3, ..., an和m个三元组表示的查询。对于每个查询(i, j, k)输出原创 2013-09-25 22:21:24 · 2584 阅读 · 1 评论 -
[android]模拟Http表单,实现本地文件(图片等)上传到服务器端
Android客服端可以用过模拟HTTP的Post方式提交表单的方式来上传本地图片到服务器端。 为了模拟Http提交表单,我们可以先来看看通过网页提交表单来请求服务器时,客户端提交了什么数据给服务端的(HTTP Header中都有什么内容)。 比如,提交的表单如下: 点击提交表单之后,我们可以利用抓包工具来查看客户端提交给服务器端的原创 2013-11-15 17:10:13 · 22841 阅读 · 6 评论