经典算法
wzb56
never say die! never ever give up!
人活着,你也让别人活!
前半生不犹豫,后半生不后悔!
改变一生的无外乎两种东西:一是你读过的书,一是你遇到的人。
改变命运的无外乎两种东西:一是你读过的书,一是你遇到的人。
展开
-
求数组中和最大的子数组(数组中和最大的子串)
又一个经典问题,对于一个包含负值的数字串array[1...n],要找到他的一个子串array[i...j](0这里我们需要注意子串和子序列之间的区别。子串是指数组中连续的若干个元素,而子序列只要求各元素的顺序与其在数组中一致,而没有连续的要求。对于一个元素数为n的数组,其含有2^n个子序列和n(n+1)/2个子串。如果使用穷举法,则至少需要O(n^2)的时间才能得到答案。卡耐基梅隆大转载 2012-04-23 22:11:37 · 2079 阅读 · 0 评论 -
面向对象的设计原则
对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模转载 2012-10-17 14:44:25 · 642 阅读 · 0 评论 -
技巧:用 C 语言实现程序的多态性: C中只有两种类型int 和void *, 万能指针void *
技巧:用 C 语言实现程序的多态性王 广, 硕士研究生, 中国科学技术大学简介: 使用面向对象的语言可以实现多态,并且在很大程度上降低了代码的复杂性。对于面向过程的 C 语言同样可以实现多态,本文将着重介绍 C 语言是如何实现多态的。发布日期: 2010 年 8 月 17 日 级别: 初级 访问情况 : 8880 次浏览 评论:转载 2012-10-16 21:59:16 · 1693 阅读 · 1 评论 -
C语言实现封装、继承和多态
作者:Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://dongxicheng.org/cpp/ooc/1、 概述C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是struct,查找Int转载 2012-10-17 00:01:50 · 1075 阅读 · 0 评论 -
选择排序:selectSort
选择排序:选择排序其实是以一种缩减问题规模的方法,将数组排序的算法 1. 对于数组a[0...n-1] 中的元素,通过比较,选出数组中最小元素的下标k, 将a[k] 和a[0] 交换,确定a[0],; 2. 同理,剩余的n-1一个元素a[1...n-1],仍然可以通过1的方法,确定a[1]. 3.原创 2012-09-24 19:59:07 · 746 阅读 · 0 评论 -
冒泡排序:bubleSort
冒泡排序:就像水里的气泡,密度小往上浮。 对于数组而言,当然是值小的向数组下标小的方向传播,值大的向数组下标大的方向传播,传播是通过数组元素之间的交换实现的。 最终生成有序数组的过程。改进的冒泡排序:当数组中的元素不在发生交换时,说明排序完成。(因为数组元素总是相邻元素比较,并且发生逆序时,交换,从而使偏序关系得以传递)。原创 2012-09-24 19:48:38 · 1184 阅读 · 0 评论 -
常见排序算法总结
排序(sorting)排序(Sorting)第一类:内部与外部排序第二类:稳定与不稳定排序法第三类:简单与高等排序法常见之排序算法冒泡排序(Bubble sorting)选择排序(Selection sorting)插入排序(Insertion sorting)快速排序(Quick sorting)堆排序(Heap sorting)希尔排转载 2012-10-15 23:23:50 · 872 阅读 · 0 评论 -
数据结构队列之环形队列的动态数组实现:queue
queue: 也是一种线性的数据结构,其操作一般来讲也是受限的,典型特征是(First in, First out, FIFO)先进先出; 进入队列的元素总是在队列的tail入队,离开队列的元素总是从队列的head离开。其实实现有多种方式:1. 用链表实现,head指针指向queue的head, tail指针指向queue的tail;原创 2012-09-25 09:22:12 · 2196 阅读 · 0 评论 -
数据结构栈stack的动态数组实现
stack:是一种的后进先出的线性数据结构,其操作一端是受限的,即只能从栈顶操作。通常,其实实现可以有动态数组实现,也可以由链表实现,似乎链表实现更合理。同过数组实现的栈的一个好处,可以是栈想数组那样随机的访问stack中的元素,而且通过预留量不用频繁的内存分配操作。本文,针对stack 实现一种用C语言实现的动态数组栈。栈的容积可以随栈中元素的个数,将其容量自动增减,本文实现原创 2012-09-24 21:00:12 · 1019 阅读 · 0 评论 -
你能写个真正小于n的随机数吗?
一个小于n的随机数, 即所有的在[0, n) 之间的数出现的概率是相同的。平时,我写一个小于n的随机数总是:r = rand() % n; 这样产生的数,是个真正的随机数吗?关键一点是c程序中能够产生的伪随机数的个数是有限个,因为系统中会这样一个常量:RAND_MAX ,也是c库能够产生伪随机数的最大数目。如果我们用一个连续生成的随机数列,其值都%2, 会发现其值是0, 1相间的。原创 2012-09-27 10:01:44 · 1584 阅读 · 0 评论 -
中文分词:之Trie树
中文分词一直都是中文自然语言处理领域的基础研究。目前,网络上流行的很多中文分词软件都可以在付出较少的代价的同时,具备较高的正确率。而且不少中文分词软件支持Lucene扩展。但不管实现如何,目前而言的分词系统绝大多数都是基于中文词典的匹配算法。 在这里我想介绍一下中文分词的一个最基础算法:最大匹配算法 (Maximum Matching,以下简称MM算法) 。MM算法有两种:一种正向转载 2012-08-24 10:06:16 · 10515 阅读 · 0 评论 -
求链表中倒数第k个结点
求链表中倒数第k个结点题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。更优化的算法,第二个指针每次移动k步而不是一步,减少遍历的次数!//将链表中的每k个节点作为一组处理,//倒数第k个元素只能出现在最后一组, (节点的个数是k的整数倍时)//或者倒数第二组,(节点的个数不是 k的整数倍时)原创 2012-05-15 22:08:39 · 1351 阅读 · 0 评论 -
用头插法反转链表
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:typedef char item_t;typedef struct node { item_t item; struct node * next;} node_t;分析: 使用头插法可以快速实现反转。所谓头插法, 即每次将新节点插入到链表的头节点之前。 实现代码如下原创 2012-05-16 15:03:39 · 2206 阅读 · 0 评论 -
数组的循环右移
/*************************************************************************************\命题:数组array,长度为n,要求向右循环移动k位(0\************************************************************************转载 2012-05-09 18:30:37 · 1723 阅读 · 0 评论 -
统计文章中词的词频
统计文章中的单词的词频,可以使用C++中Map来实现。1.统计从标准输入输入的单词的词频。#include #include #include using namespace std;int main(int argc, char *argv[]) { string s; map counter; while(cin >> s) { if(s[0] =原创 2013-04-08 19:31:14 · 1684 阅读 · 0 评论