- 博客(34)
- 收藏
- 关注
转载 四人帮设计模式之精简理解
设计模式绝对不是灵丹妙药,但是合适的地点合适的时间使用设计模式绝对能事半功倍。就像武林中的招式,开始习武只能见招学招,但是一旦融汇贯通,便能无招胜有招,杀伤力与优雅并存。我还在见招学招的阶段,所以暂且总结一下日常编码中用过的或者有点理解的模式,以作备忘。1.简单工厂一个工厂生成多种类,根据输入判别需要生成的类。最简单最直观的工厂。2.策略模式要调用的方法定义成接口...
2014-06-10 22:15:00
174
转载 面向对象SOLID原则的自我理解
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写。面向对象设计的原则SRP The Single Responsibility Principle 单一职责原则OCP The Open Closed Principle 开放封闭原则LSP The Liskov Substitution...
2014-06-10 21:25:00
138
转载 利用VisualStudio单元测试框架举一个简单的单元测试例子
本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子。如果需要深入理解Unit Test的原理与艺术,请参考《The art of Unit testing:with examples in .NET》1.首先要知道你要测试什么,Unit Test可以测试方法的输出是否符合预期,或者对没有输出的方法可以测试对对象状态造...
2014-06-06 23:15:00
231
转载 一个最简单的使用Entity Framework 查询SQL 数据库的例子
1.ADO.NET 3.5 Entity Framework是随着.net framework 3.5一起发布的,确认开发环境版本是大于等于3.5版本2.确认已经安装了ADO.NET 3.5 Entity Framework 和ADO.NET 3.5 Entity Framework Tools:右键单击创建的winform或者wpf程序,选择“Add|New Item”,查看Tem...
2014-05-30 22:37:00
151
转载 几何算法:点集合构造简单多边形
问题:给定平面中n个点所组成的集合,将它们连接起来形成一条简单的封闭路径。所谓简单路径,是指边与边无交叉。如下图所示10个点组成的简单轮廓:思路:取x坐标最大的点A(如果最大x坐标的点不止一个,则取Y坐标最小的点),依次计算A点与其余各点的连线与水平线之间夹角的正切值,然后按照正切值排序,依次连接排序后的各点即组成一个简单图形。原理:其它所有点都在A点的左侧,所有夹角的范...
2014-05-26 22:08:00
1416
转载 序列和集合算法之序列比较
将一个序列变成另一个序列的最少修改步数。例如下图,将字符串A变成字符串B,所需要的步骤为6个步骤,match表示0步,其他操作表示1步:设计算法如下: public sealed class MinimumEditDistance { public int[,] CalculateDistance(string originalStr...
2014-05-19 00:20:00
166
转载 .Net并行编程系列之三:创建带时间限制(Timeout)的异步任务并取得异步任务的结果...
尝试创建基于MVVM三层架构的异步任务:场景:View层触发ViewModel层的动作请求,ViewModel层异步的从Model层查询数据,当数据返回或者请求超时时正确更新ViewModel层数据并触发View层的UI更新。要求:View层保持UI响应,ViewModel层实现有超时控制的异步调用并返回结果---------------------------实现三个W...
2014-05-16 14:29:00
121
转载 枚举类型表示组合状态的抽象代数原理
可以使用枚举类型定义位标志,从而使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。(当然,某些组合在您的程序代码中可能没有意义或不允许使用。)创建位标志枚举的方法是应用System.FlagsAttribute特性并适当定义一些值,以便可以对这些值执行AND、OR、NOT和XOR按位运算。在位标志枚举中包含一个值为零(表示“未设置任何标志”)的命名常量。如果零...
2014-05-12 13:48:00
128
转载 WCF开发实战系列五:创建WCF客户端程序
WCF开发实战系列五:创建WCF客户端程序(原创:灰灰虫的家http://hi.baidu.com/grayworm)在前面的三篇文章中我们分别介绍了WCF服务的三种载体:IIS、Self-Host、Windows Service Host。当WCF编写完成后我们一般要通过这三种方式的一种发布WCF服务,当WCF服务发布后,我们就可以编写客户程序来与服务的终结点进行通...
2014-05-11 22:19:00
83
转载 WCF开发实战系列四:使用Windows服务发布WCF服务
WCF开发实战系列四:使用Windows服务发布WCF服务(原创:灰灰虫的家http://hi.baidu.com/grayworm)上一篇文章中我们通过编写的控制台程序或WinForm程序来为本机或远程机提供WCF服务的方式,我们称这种方式为Self-Host服务发布方式,这一篇文章我们来看一下如何编写Windows服务来发布WCF服务。第一步:建立Window...
2014-05-11 21:22:00
80
转载 WCF开发实战系列三:自运行WCF服务
WCF开发实战系列三:自运行WCF服务(原创:灰灰虫的家http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把这个WCF服务站点布署到IIS中去,实现WCF服务在Web上的发布。这一篇文章中我们来谈一下“自运行WCF服务”。什么是“自运行WCF服务”呢?就是通过我们编写的控制台程序或W...
2014-05-11 21:20:00
80
转载 WCF开发实战系列二:使用IIS发布WCF服务
WCF开发实战系列二:使用IIS发布WCF服务(原创:灰灰虫的家http://hi.baidu.com/grayworm)上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS2008自带的WCFSVCHost(WCF服务主机)发布WCF服务,以便进行测试。这种VS2008内置的WCFSVCHost只适用于开发人员测试的使用,能进行WCF服务部署。这一篇...
2014-05-11 21:18:00
89
转载 WCF开发实战系列一:创建第一个WCF服务
WCF开发实战系列一:创建第一个WCF服务(原创:灰灰虫的家http://hi.baidu.com/grayworm)在这个实战中我们将使用DataContract,ServiceContract来构建WCF服务,并使用VS2008内置的“WCFSVCHost”运行我们创建的WCF服务,并使用“WCF测试客户端”来测试我们创建的服务。在此WCF服务中我们将建立一个关于...
2014-05-11 21:10:00
86
转载 .Net并行编程之二:并行循环
本篇内容主要包括:1.能够转化为并行循环的条件2.并行For循环的用法:Parallel.For3.并行ForEach的用法Parallel.ForEach4.并行LINQ(PLINQ)的用法AsParallel()5.并行中断与并行停止的用法与区别6.外部控制循环取消的方法(Break,Stop)7.处理循环体中抛出的异常8.小循环体的分区并行方法:Pa...
2014-05-06 21:37:00
178
转载 WPF系列之三:实现类型安全的INotifyPropertyChanged接口,可以不用“Magic string” 么?...
通常实现INotifyPropertyChanged接口很简单,为你的类只实现一个PropertyChanged 的Event就可以了。例如实现一个简单的ViewModel1类: public class ViewModel1 : INotifyPropertyChanged { private string _data; p...
2014-05-05 22:26:00
103
转载 WPF系列之二:解耦View层控件事件与ViewModel层事件的响应
以前的做法:1.当项目的时间比较紧迫的时候,对UI层中控件的事件的处理,往往采取的是类似Winform中最简单的做法,直接做一个事件的Handler直接去调用VM层的方法。2.控件只有一个Command属性,其它的事件的处理方法没有办法和ViewModel层进行解耦的时候往往也采取上面提到的方法。如下图所示:新的做法:为了实现事件的处理与View层的解耦,我们...
2014-05-05 00:01:00
204
转载 .Net并行编程系列之一:并行基础
现在普通PC平台上面多核处理器的普及,让我们领教了能够利用多核进行并行计算的软件的处理能力,同时继承更多地核心正是当前处理器发展的趋势。但是作为一个.NET开发人员,是否有时候会发现你的程序占用了其中一个核心的大部分运行时间,甚至达到了100%,除了继续优化处理问题的算法。那么还有方法能够利用CPU的其它核心为你的应用程序所用么?答案是显然可以的。你所要做的,就是把应用程序的...
2014-05-02 19:37:00
62
转载 数据压缩算法之哈夫曼编码(HUFFMAN)的实现
HUFFMAN编码可以很有效的压缩数据,通常可以压缩20%到90%的空间(算法导论)。具体的压缩率取决于数据的特性(词频)。如果采取标准的语料库进行编码,一般可以得到比较满意的编码结果(对不同文件产生不同压缩率的折中方法)。本文采取对单独一个文件进行编码的方式来演示此压缩算法的使用。分为下面几个步骤:1.统计词频数据2.词频数据转换成HUFFMAN算法能够处理的类型(本文...
2014-05-01 21:27:00
355
转载 基于堆的最大最小优先级队列的实现
最大堆能够在O(1)的时间内取得集合中的最大值,并且在集合中加入新元素的时候,能够以O(Logn)的时间将新的元素插入到堆中。当取出最大的元素时,能够以O(Logn)的时间重新将堆整理成最大堆。最小堆同理。最大优先级队列的应用实例:基于优先级的作业调度,在所有等待调度的作业中,选择具有最大优先级作业进行处理。同时一个新的作业也可以插入到队列里面去。例如可以实现自己的基于优先级...
2014-04-30 23:51:00
152
转载 WPF系列之一:基于并行任务和MVVM创建响应灵敏和数据驱动的UI
在利用WPF创建桌面应用程序的界面时,经常使用MVVM的设计模式,以减少UI层与逻辑层的代码耦合度。在MVVM的设计中,最主要的方法和技术是UI中的控件利用Binding来和逻辑层(ViewModel)进行交互,其中控件的属性为依赖属性,而作为控件的DataContext的ViewModel则实现了INotifyPropertyChanged接口。除了一般意义上的属性的数据的交互...
2014-04-30 17:54:00
154
转载 基于比较的算法之五:堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。通常堆是通过一维数组来实现的。在起始数组为 0 的情形中:父节点i的左子节点在位置 (2*i+1);父节点i的右子节点在位置 (2*i+2);子节点i的父节点在位置 floor((i-1)/2);在堆的数据结构...
2014-04-29 14:44:00
108
转载 顺序统计:寻找序列中第k小的数
最直观的解法,排序之后取下标为k的值即可。但是此处采取的方法为类似快速排序分块的方法,利用一个支点将序列分为两个子序列(支点左边的值小于支点的值,支点右边大于等于支点的值)。如果支点下标等于k,则支点就是查找的值,如果支点的下标大于k,则在左子序列里继续寻找,如果支点下标小于k,则继续在支点右子序列里面继续寻找第(k-支点下标)小的值。c#实现算法如下: public...
2014-04-27 23:43:00
442
转载 顺序统计:寻找序列中的最大最小数
查找输入序列中的最大最小数值,要求时间复杂度为1.5nC#实现如下:public class MinMaxFinder<T> where T : IComparable<T> { public void FindMinMax(T[] array, int startIndex, int endIndex, out T min...
2014-04-27 22:41:00
144
转载 非基于比较的排序算法之一:计数排序
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值小于等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。限制:所有值得取值范围不能太大,并且需要知道确切的取值范围。本算法需要的辅助空间要求较高。当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n+k)。计数排序不是比较排...
2014-04-27 22:09:00
81
转载 基于比较的算法之四:快速排序
算法思想:分治法,把一个序列分成两个,其中一边的元素小于另一边的元素。一直这样分下去,直到只有一个元素的时候返回。然后回推往前看,所有的元素已经按大小归位。算法的难点在于将一个序列分成两列的过程,使得一边元素小于另一边,下面给予说明。设数组array对下标 leftIndex到rightIndex之间的元素进行划分Partition初始状态leftIndex指向数组的第一个元素,...
2014-04-23 23:42:00
94
转载 基于比较的算法之三:插入排序
插入排序的思想是:1。假设第一个元素是有序的,理解这个有序是针对只有这一个元素。2。然后依次拿出后面元素插入到前面元素构成的有序序列里面(这个过程保证了算法的稳定性,因为遇到等于小于自己的时候就停止插入操作)。3。直到最后一个元素插入到插入到前面的有序序列,完毕。时间复杂度分析:假设数组有n个元素最好情况:n个元素是逆序的,则每个元素需要2次比较,3次数据移动...
2014-04-23 22:09:00
66
转载 基于比较的算法之二:选择排序
算法思想:排序数组内元素由小到大:1.每一趟从序列中选出最大的元素,然后与末尾的元素对调(决定了此排序是不稳定的,因为有可能把原位置元素调换到与和它等值的元素前面)。2.重复1的动作,把上一部调换到末尾的元素排除在外。3.当只剩下第一个元素时,排序完毕。时间复杂度:设共有n个元素最好情况,原来数组元素正好是排好序的,则第i次扫描的比较次数是Ci=n-i,i=0...
2014-04-23 21:35:00
93
转载 基于比较的算法之一:冒泡排序
冒泡排序是基于比较的排序中比较基本的算法。以升序排序目的为例,算法的中心思想是从头至尾的比较两两相邻的元素,如果发现有反序(决定了稳定性)的则交换两个相邻元素。完成第一趟比较后最大的元素放到了最末端。第二趟从头至尾的比较不用比较最后一个元素(最大元素已经在最末端正确位置),所以比第一次少比较了一个元素,这趟比较完成后,第二个元素到达正确位置。持续进行这样的操作,直到只剩下最后...
2014-04-23 20:58:00
97
转载 轮廓问题/Outline Problem-->改进的算法及时间复杂度分析
前面写过一篇关于轮廓算法的文章,是把合并建筑和合并轮廓是分开对待的,并且为了使轮廓合并的时候算法简单,对x坐标使用了double类型,然后对整形的x坐标数据进行合并。这样做是为了使得需找拐点的算法容易理解,遇到拐点的时候方便辨认。但是缺点也很明显:它对所有建筑的x坐标区间(MaxX-MinX)非常敏感,区间变大的话,效率就会下降(它用double类型来遍历所有x的整形坐标,double可...
2014-04-23 17:57:00
374
转载 寻找最大连续子序列/Find the max contiguous subsequence
寻找最大连续子序列给定一个实数序列X1,X2,...Xn(不需要是正数),寻找一个(连续的)子序列Xi,Xi+1,...Xj,使得其数值之和在所有的连续子序列数值之和中为最大。一般称这个子序列为最大子序列,例如,在序列(2,-3,1.5,-1,3,-2,-3,3)中,最大的子序列是(1.5,-1,3)它的和是3.5,在一个给定的序列中可能有几个最大子序列。如果所有的数值为负数...
2014-04-18 10:03:00
191
转载 轮廓算法的结果验证工具/How to validate the outline output
因为轮廓算法的结果通过直接观察输出很难判断结果的正确性。但是如果把输入和输出同时绘制出来,用眼睛判别则相对简单许多。输入建筑的文件内容格式为,粗体格式为建筑高度:10110502060703013090120701601403025019018022023013029024040280输入轮廓的文件内容格式为,粗体格式为轮廓高度:10...
2014-04-17 17:50:00
66
转载 轮廓问题/Outline Problem
---------------------------------------------------//已发布改进后的轮廓问题算法:http://www.cnblogs.com/andyzeng/p/3683498.html---------------------------------------------------对于城市中几座建筑外形,给出这些建筑的二维轮廓。每...
2014-04-17 12:17:00
407
转载 美国选举问题/完全背包/Knapsack
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Knapsack{ /// <summary> /// Project:Knapsack /// Author: Andy Zeng...
2014-04-17 11:53:00
175
转载 名人问题/名流问题/Celebrity
问题描述:名人问题一个名人就是指这样一个人:所有其他人都认识他,并且他不认识任何其他人。现在有一个N个人的集合,以及他们之间的认识关系。求一个算法找出其中的名人(如果有的话)或者判断出没有名人(如果没有的话)。1.构造输入数据数组,名人所在的Index可控。public static int[,] initCelebrityData(int size, int celebra...
2014-04-17 11:47:00
712
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人