基于.NET的分词软件设计与实现V4.0--使用SortedList提高分词效率
隔了一段时间,忙其他的去了,下面继续偶之前的分词软件。
在之前的3个版本里,我们已经实现了分词的基本功能,并对其合理性等作了大量的测试评估工作,但是性能的提升还很不如意,所以这里我提出了使用SortedList提高分词效率的方案。
C#中提供了众多集合类的数据结构,如大家常用的List<T>,Dictionary<T>等,这里我将着重介绍一下SortedList,并
http://www.cyqdata.cn/cnblogs/article-detail-41166
堆排序-heapsort
什么是堆?"堆"这个词最初是在堆排序中提出的,但后来就逐渐指"废料收集存储区",当然这里不是指"废料收集存储区"。堆数据结构是一种数组对象,由于一棵完全二叉树可以用一组地址连续的存储单元依次自上而下、自左至右存储,故堆可以被视为一棵完全二叉树,如下图:
圆圈中的数字表示树中每个节点的值,节点上方的数字表示对应的数组下标。
一个堆的数组A,用length[A]表述数组中的元素个数,heap-size
http://www.cyqdata.cn/cnblogs/article-detail-41091
最近看到的两个有意思的算法Sleep Sort与硬币模拟
Sleep Sort
SleepSort是一个使用多线程不同的休眠时间的排序算法。先看一下原始的版本
#!/bin/bashfunction f() { sleep "$1" echo "$1"}while [ -n "$1" ]do f "$1" & shiftdonewait ./sleepsort.bash 5
http://www.cyqdata.cn/cnblogs/article-detail-40788
.Net集合类的研究-有序集合(二)-SortedDictionary<TKey,TValue>
从类名就可以看出SortedDictionary<TKey,TValue>和上篇介绍的SortedList一样,都是有序集合,但从类内部的存储结构上看,两者有很大区别,SortedList内部用数组保存,只能算是有序线性表,而SortedDictionary<TKey,TValue>的内部结构是红黑树。 园子里有不少关于红黑树的好文章,已将红黑树分析的很透彻。所以这里不讨
http://www.cyqdata.cn/cnblogs/article-detail-38632
C# 谈Dictionary<TKey,TValue>,SortedDictionary<TKey,TValue>排序
使用过Dictionary的人都知道,当每一个Add里面的值都不会改变其顺序,所以需要需要对其排序的时候就用到SortedDictionary,但SortedDictionary并不是那么理想,其默认的方式只支持正序排序,想要反序排序时必须得靠自己重新编写代码,下面来看一个简单的例子:
测试环境为Web,如在WinForm下,调试则只需改一下输出语句即可。
如以下代码在调试时不能使用则需要引用:
http://www.cyqdata.cn/cnblogs/article-detail-28612
一个Quicksort究竟可以写到多么短
一个Quicksort究竟可以写到多么短
说实话,我从来没有能一次写对一个快速排序,总是有各种各样的错误。
快排麻烦就麻烦在,没办法去调试它,因为它是生成递归的,只能去静态调试,或者是不断的打印数组的状态以推测错误的可能性。
然而快排的基本思想却是极其简单的:接收一个数组,挑一个数,然后把比它小的那一摊数放在它的左边,把比它大的那一摊数放在它的右边,然后再对这个数左右两摊数递归的执行快排过程,直到子数组只剩一个数为止。
下面我先用最常用的C语言来写一个快速排序:
首先可以先写出一些伪代码:
void quicksort(int array[], int left, int right)
{
//Do nothing if left <= right
//p <- Get a number from array
//Put elements <= p
http://www.cyqdata.cn/cnblogs/article-detail-292