结构与算法
文章平均质量分 84
影儿
软件工程师,对 java+javascript web 开发比较了解, 熟悉 SSH , ibatis, extjs4, jquery 等开发框架,对编程和计算机领域的设计思想感兴趣, 职业方向是产品品质与产品开发。
展开
-
自己写的一个哈希表的实现
哈希表是数组、链表及数学算法的一个综合应用, 无论在理论上还是实践上都是非常有价值的。原创 2011-07-06 11:18:56 · 2617 阅读 · 0 评论 -
向量旋转算法(Java实现)
向量旋转问题:给定一个 n维向量, 求 将它向左循环移动i位后的向量。比如:[1,2,3,4,5]向左循环移动3位后,变成[4,5,1,2,3]。为了简单起见,向量采用数组表示。 本文讨论的内容参见《编程珠玑I》(第二版)的第二章。在那里,讨论了向量旋转的四种算法: 1.基于数组移动的思路: 这个是比较简单的,即将要移动的i个元素原创 2011-04-18 18:00:00 · 5215 阅读 · 4 评论 -
使用堆查找前K个最大值兼谈程序优化(上)
一、 缘起 看到CSDN社区有篇《3秒搞定一亿数据的前K个最大值》, 想想堆排序不是可以用来做这事吗,于是就动手做做,看看堆排序能够达到怎样的效率。堆的原理就不多说了,网上有好多, 如果想参阅比较权威性的材料,可参见《算法导论》第六章堆排序。 本文的程序即是建立其上。 二、 程序 KthMax.c/* * 使用堆排原创 2012-05-11 19:38:03 · 2074 阅读 · 2 评论 -
使用堆查找前K个最大值兼谈程序优化(下)
在建立正确性的回归测试之后,继续前进。 首先用性能工具分析下, 发现有点悲剧: 效率又倒退了。去除不必要的系统调用后, Profile分析结果如下: 七、 一些小改进 生成一亿个随机数也比较耗时, 可以看到rand()耗费时间并不多,但creatListInternal 耗费时间却很多, 可以推断, 模运算上原创 2012-05-13 09:29:37 · 1114 阅读 · 0 评论 -
使用堆查找前K个最大值兼谈程序优化(中)
上篇谈到, 之前的程序使用堆查找前K个最大值的效率并不理想,本篇尝试对程序进行优化,以提高程序效率。 一、 算法设计方面 要提高程序效率, 首先从算法设计方面,即时间复杂度方面考虑。 由于查找前K个最大值总要遍历整个列表,因此,其效率必定不小于线性的,而前面已经谈到,使用堆查找其效率平均情况下可以达到线性, 因此, 整体的算法复杂度恰好为线性的,无法在原创 2012-05-11 21:50:51 · 1426 阅读 · 0 评论 -
常用算法设计技术总结
算法,即计算的方法,使用计算的思想、方法、工具和技术来实现问题求解的思路和途径。计算机提供了计算的能力和硬件设施;算法则提供了计算的思想和软件技术,更好地发挥计算机的潜能。原创 2010-09-02 18:02:00 · 4734 阅读 · 3 评论 -
二项式定理(Java实现及代码重审)
在上一篇文章中,我总结了从阅读《编程珠玑I》中获得的一些启示。其中有非常重要的一条:代码重审和回顾。通过对以前写过的代码进行重新审视和改进(以现在的经验),使之更具实用性,从而学习新的东西。你敢于面对以前写过的代码吗?如果你都不敢面对,谁还能有这个勇气? 作为代码重审和回顾的一个例子,我对以前的一个粗糙的二项式定理实现进行了重审和改写。当时,主要是为了学习动态规划法技术,运原创 2011-04-22 17:33:00 · 3214 阅读 · 0 评论 -
图案打印: 记法与解释器
童鞋们应该对“打印星形图案”的编程题记忆犹新吧? 那就像我们的编程童年一样的美好。 打印边长为 n 个菱形, HO, 有的人立马就刷刷刷写出来了: package patterns.interpretation;public class FigurePrinting { /** * 根据给定 n 值打印菱形图案 * @param n 菱形的边数 */ pu原创 2011-07-13 11:23:51 · 1413 阅读 · 0 评论 -
一个字符串问题的思考
一、 问题描述: 求解给定文本text 中以字符 A 开头, 字符B 结尾的子串数量。例如,文本ABCAAB 中以A开头B结尾的子串分别为AB, ABCAAB, AAB, AB 共4个。二、 问题分析及算法设计: 字符串问题求解的通用策略: 我从《TCPL》中学到的印象最深的一点,就是“逐字符处理”策略(同时注意 '\0'的处理)。首先,使用蛮力原创 2011-06-14 17:03:00 · 1449 阅读 · 0 评论 -
推荐一本算法入门书籍
推荐一本很好的算法入门书籍: 《算法设计与分析基础》(第2版),(美) Anany Levitin 著, 潘彦译。 除了 《 Thinking in Java 》,这是我另外一本读过了三分之二内容还希望不断翻阅的书原创 2011-01-27 14:38:00 · 13642 阅读 · 4 评论 -
使用 JsPlumb 绘制拓扑图的通用方法
使用 JsPlumb 绘制拓扑图的通用方法: 绘制拓扑图, 实际上是个数据结构和算法的问题。 需要设计一个合适的数据结构来表达拓扑结构,设计一个算法来计算拓扑节点的位置及连接。原创 2013-11-01 17:22:31 · 18254 阅读 · 11 评论 -
使用 highchart 绘制柱状图的通用方法与接口
本文给出使用 highchart 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用。原创 2014-01-25 17:06:16 · 2576 阅读 · 0 评论 -
位图排序(位图技术应用)
1. 问题描述 给定不大于整数 n 的 k 个互不相等的整数 ( k 2. 问题分析 关于排序,已经有多种排序方法了:插入排序,归并排序,快速排序,希尔排序等。每种排序都有不同的用武之地。为什么需要位图排序呢?所有的内部排序(上述所提及)都必须一次性将所有排序元素载入内存。假如有1000,000个整数,每个整数4字节,则意味着,至原创 2011-02-24 10:05:00 · 3713 阅读 · 2 评论 -
二叉查找树的Java实现
为了克服对树结构编程的恐惧感,决心自己实现一遍二叉查找树,以便掌握关于树结构编程的一些技巧和方法。以下是基本思路: [1] 关于容器与封装。封装,是一种非常重要的系统设计思想;无论是面向过程的函数,还是面向对象的对象,都是实现抽象和封装的技术手段。要使系统更加安全更具可维护性,就应当将封装思想谨记心中。容器是封装思想的绝好示例。用户对容器的印象应该简洁地表达为:A. 可以存原创 2011-03-13 17:36:00 · 5493 阅读 · 1 评论 -
减一技术应用:生成排列与幂集(Java实现)
减一技术,与二分搜索一样,是一种通用算法设计技术。它是分治法的一种特殊形式,通过建立问题实例P(n) 与问题实例P(n-1)的递推求解关系式而实现;最经典的例子莫过于插入排序了。这里,给出减一技术在生成排列组合方面的应用。 (一) 排列问题: 生成自然数 1,2,,,,原创 2010-08-31 11:03:00 · 2195 阅读 · 0 评论 -
二叉树漫游——编程技术与技巧总结(下):递归转换为非递归
前一篇讲解了如何编写二叉树结构的递归程序。尽管递归求解二叉树的方法和策略非常有效,但递归程序可能会产生不可接受的系统开销;因此,理解递归程序的机制,将递归程序转换为非递归程序的技能是非常重要的。 递归机制并不神秘。递归实际上就是特殊形式的普通函数调用,只是被调原创 2011-03-19 17:38:00 · 1116 阅读 · 0 评论 -
二叉树漫游——编程技术与技巧总结(上):递归技术
二叉树漫游——编程技术与技巧总结(上):递归技术 本系列分三篇文章,分别对二叉树编程中的常用技术和技巧进行了总结。第一篇是关于二叉树编程的递归技术的;第二篇讨论如何将递归程序转化为非递归程序;第三篇讨论二叉树编程的其它方法和技术。原创 2011-03-19 09:30:00 · 1996 阅读 · 0 评论 -
大整数幂求模问题
一、 问题描述: 计算 (a^power) % m , 其中power 是非负的大整数, a, m 为大于1 的整数。 二、 问题分析: 很显然, 由于 power 是大整数,因此,必须考虑到幂计算的溢出问题。怎么避免溢出呢? 可以通过降低幂次、逐次取模来实现。一个自然的想法是,将power原创 2011-06-14 14:13:00 · 3595 阅读 · 0 评论 -
生成真值组合【Java实现】
/** *问题描述:给定 n个布尔变量,打印所有真值组合。 *例如, n = 2时,所有真值组合为 (true, false),(true, true),(false, true),(false, false). * *算法的基本思路: *使用一个长度为 n的数组存储着 n个布尔变量;位 1表示 true ,位 0表示原创 2010-12-13 20:25:00 · 1405 阅读 · 0 评论 -
0/1背包问题的动态规划法求解 —— Java 实现
0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进对动态规划法机制的理解和掌握。 值得提及的一个问题是,在用 JAVA 实现时, 是按算法模型建模,还是用对象模型建模呢? 如果用算法模型,那么 背包的值、重量就直接存入二个数组里;如果用对象模型,则要对背包以及背包问题进行对象建模。思来想去,原创 2010-09-02 16:39:00 · 13859 阅读 · 2 评论 -
一个简单的格式化信函生成器
童鞋们都应该见过各种各样的请柬咯, 请柬上面通常是一个模板,然后填上被邀请人及相关信息,在 Word 里面称之为 “邮件合并”特性。 今天,我们就来实现一个简单的格式化信函生成器。 我们将要做的东西, 包括一个非常简单的学生选课数据库,以及简单的模板, 利用数据库中的记录及模板生成格式化的通知信息。 关于C语言的实现, 请参考 《编程珠玑I》(第二版) 的第三章第二节。 别看这个原创 2011-07-12 19:11:29 · 3258 阅读 · 0 评论 -
二叉树Java实现
为了克服对树结构编程的畏惧感和神秘感,下定决心将二叉树的大部分操作实现一遍,并希望能够掌握二叉树编程的一些常用技术和技巧。关于编程实现中的心得和总结,敬请期待!~ [1] 数据结构和表示: 二叉树的输入输出格式采用广义表表达式形式,内部表示采用左孩子右孩子的链式存储。 [2] 已经实现的操作有: A. 根据二叉树的广义表表达式来创建二叉树原创 2011-03-17 15:26:00 · 7428 阅读 · 3 评论 -
输入自动提示与补全功能的设计与实现
包含一个简短而完整的Web示例, 演示如何根据用户输入的字符进行自动提示和补全。原创 2014-02-11 17:46:05 · 3259 阅读 · 0 评论