银河

SKYIV STUDIO

  博客园 :: 首页 ::  ::  :: 订阅 订阅 :: 管理 ::
  170 随笔 :: 2 文章 :: 1562 评论 :: 48 引用

算法

     摘要: 本文通过纯计算密集的计算圆周率到小数点后二十万位,对 C# 程序和 C 程序进行性能比试。结论是:在 Linux 操作系统下特定的 C# 程序比 C 程序要快。  阅读全文
posted @ 2010-07-24 12:22 银河 阅读(1724) | 评论 (35) 编辑

     摘要: 本文分析网络上流传的只有四行 C 语言源代码的计算圆周率的外星人程序。给出所用算法,并发现可以计算圆周率到小数点一万位。  阅读全文
posted @ 2010-07-13 22:57 银河 阅读(2743) | 评论 (12) 编辑

     摘要: 本文讨论在 Sphere Online Judge (SPOJ) 网站上的计算圆周率的题目。  阅读全文
posted @ 2010-07-13 00:04 银河 阅读(1667) | 评论 (16) 编辑

     摘要: 本文讨论概率性的素数检验算法:Miller-Rabin primatlity test。并给出 Ruby 语言和 C 语言实现。  阅读全文
posted @ 2010-07-10 21:39 银河 阅读(1095) | 评论 (16) 编辑

     摘要: 本文讲述使用 Ruby 语言和 C# 语言求解有关大整数的ACM题。  阅读全文
posted @ 2010-07-05 22:40 银河 阅读(1427) | 评论 (9) 编辑

     摘要: 使用 C#、C 和 Ruby 语言求解回文数问题。  阅读全文
posted @ 2010-07-04 00:28 银河 阅读(1231) | 评论 (4) 编辑

     摘要: 本文讨论对 BigInteger 的 GetHashCode、Parse 和 ToString 方法进行优化。  阅读全文
posted @ 2010-04-22 00:56 银河 阅读(1213) | 评论 (3) 编辑

     摘要: Instructions for MMIX: A RISC Computer for the New Millennium   阅读全文
posted @ 2009-12-29 12:03 银河 阅读(183) | 评论 (1) 编辑

     摘要: 本文介绍 Donald E.Knuth 发明的 MMIX 机器及其汇编语言。  阅读全文
posted @ 2009-12-21 11:58 银河 阅读(1644) | 评论 (19) 编辑

     摘要: one 和 puton 这两个人进行交谈。one 只能够说:out、output 和 puton 这三个单词。而 puton 只能说 in、input 和 one 这三个单词。她们之间的对话是由单词直接连接而成(单词之间没有空格)。你的任务是判断给定的输入(该输入仅包含小写拉丁字母)是否为合法的对话。这是一个多模式字符串匹配问题。我们根据给定的模式构造一个有限自动机来进行匹配。  阅读全文
posted @ 2009-05-21 00:05 银河 阅读(2171) | 评论 (18) 编辑

     摘要: 这是用 C# 实现的各种算法和数据结构的目录。 会不时更新。   阅读全文
posted @ 2009-05-18 21:23 银河 阅读(388) | 评论 (0) 编辑

     摘要: 在上一篇随笔“用 C# 写个人住房贷款计算器”中提到,等本息法在利率不变的情况下,每月的还款额是固定的,并给出了计算公式,现在就让我们来推导出这个公式吧。本文还对等本息法和等本金法应付的总利息进行了比较,并讨论了利率为零时的等本息法的月还款额。  阅读全文
posted @ 2009-05-03 19:11 银河 阅读(3547) | 评论 (30) 编辑

     摘要: 本文实现了一个带键值的优先队列 KeyedPriorityQueue<T, K, V> 泛型类,并从中派生出 PriorityQueue<T> 泛型类,以消除重复的代码。  阅读全文
posted @ 2009-04-20 20:54 银河 阅读(2371) | 评论 (8) 编辑

     摘要: 一门新的程序设计语言 D++ 被开发出来,用于在校学生参加的程序设计竞赛。但是需要一个新的操作系统才能运行 D++ 语言写的程序。现在你需要为新的操作系统写第一个模块:内存管理。  阅读全文
posted @ 2009-04-19 15:57 银河 阅读(2300) | 评论 (4) 编辑

     摘要: 优先队列(priority queue) 是很重要的数据结构。我在做 ACM 题时就经常要用到她。C++ STL 就包括 priority_queue 。Java 也有 PriorityQueue 类。遗憾的是,.NET Framework Base Class Library 中并不包括优先队列。于是,我只好自己用 C# 语言写一个。  阅读全文
posted @ 2009-04-18 15:33 银河 阅读(2930) | 评论 (21) 编辑

     摘要: Timus 1209. 1, 10, 100, 1000... 要求给出特定序列的指定位置的值。  阅读全文
posted @ 2009-03-14 10:02 银河 阅读(196) | 评论 (0) 编辑

     摘要: Timus 1201. Which day is it? 要求输出指定日期的月历。  阅读全文
posted @ 2009-03-12 23:06 银河 阅读(1155) | 评论 (3) 编辑

     摘要: Timus 1018. A Binary Apple Tree 我们有一颗苹果树,该苹果树除了叶子节点以外的每个节点都分为两枝。每个节点使用 1 到 N 进行编号,其中根节点的编号为 1。每一枝上有若干苹果。为了方便采摘苹果,现在我们要对该苹果进行剪枝,要求剪去指定数目的枝条后,使被剪去的苹果数量最少。我们的任务就是求剪枝后该苹果树上还剩下多少个苹果。  阅读全文
posted @ 2009-03-08 14:58 银河 阅读(1136) | 评论 (0) 编辑

     摘要: Timus 1017. The Staircases 要求计算给定数目的砖块可以组成多少种不同的楼梯。这道题目涉及到数的分划,属于组合数学和数论的研究领域。  阅读全文
posted @ 2009-03-02 22:19 银河 阅读(1285) | 评论 (3) 编辑

     摘要: Timus 1016. A Cube on the Walk 一个立方体放在国际象棋棋盘的一个格子上,该立方体每一面都和棋盘的格子一样大。该立方体每一面都标有一个非负整数。你可以在棋盘上滚动该立方体,在这期间计算立方体底面数字的和。你的任务是找出一条从给定的起点到终点的路径,使得前面所说的和最小。  阅读全文
posted @ 2009-02-28 20:25 银河 阅读(883) | 评论 (0) 编辑

     摘要: Timus 1080. Map Colouring 讨论地图的着色问题。   阅读全文
posted @ 2008-12-18 18:13 银河 阅读(1256) | 评论 (0) 编辑

     摘要: Timus 1008. Image encoding 讨论黑白图像的编码问题。   阅读全文
posted @ 2008-12-17 11:44 银河 阅读(1578) | 评论 (6) 编辑

     摘要: Timus 1007. Code words 讨论在有噪声的信道上的通信问题。  阅读全文
posted @ 2008-12-15 16:00 银河 阅读(1304) | 评论 (8) 编辑

     摘要: Timus 1006. Square frames 这道题目比较有意思,它在屏幕上给出了一张画有一些正方形方框的图形,这些方框可能互相覆盖,但不会超出屏幕的边界。现有要求你给出一个能构成该图形的方框序列。  阅读全文
posted @ 2008-12-13 23:42 银河 阅读(1098) | 评论 (2) 编辑

     摘要: Timus 1004. Sightseeing trip 这道题目的意思是,给你一张地图,该地图上标明了若干旅游景点,以及各景点之间的道路及其里程。两个景点之间可以有多条道路,但是一条道路必须连接两个景点,而不能绕个圈又回到同一景点。现在你的任务是寻找一条最短的旅游线路。  阅读全文
posted @ 2008-12-11 19:19 银河 阅读(1355) | 评论 (0) 编辑

     摘要: Timus 1003. Parity 是和奇偶校验相关的题目。这道题是说,你和你的朋友玩一个游戏。你的朋友写下一个只包含“0”和“1”的序列,而你选择一个其中的一个子序列问你的朋友,该子序列中“1”的数目是奇数还是偶数?你的朋友回答后,你可以再选择一个子序列继续提问。但是你怀疑你的朋友的答案不全是正确的。因此你决定写一个程序来证实这一点。  阅读全文
posted @ 2008-12-10 20:11 银河 阅读(1164) | 评论 (0) 编辑

     摘要: Timus 1002. Phone numbers 要求根据所给的字典找出表示指定电话号码的单词序列。  阅读全文
posted @ 2008-12-09 15:26 银河 阅读(1218) | 评论 (1) 编辑

     摘要: Timus 1014. The Product of Digits 要求给出一个最小整数,其各位数字的乘积等于指定的数。  阅读全文
posted @ 2008-12-08 17:17 银河 阅读(215) | 评论 (0) 编辑

     摘要: 这是我在俄罗斯乌拉尔大学在线题库用 C# 语言解 ACM 题的一个目录。会不时更新。   阅读全文
posted @ 2008-12-08 16:53 银河 阅读(664) | 评论 (4) 编辑

     摘要: Timus 1110. Power 要求计算乘方(取模)问题。   阅读全文
posted @ 2008-12-06 17:43 银河 阅读(206) | 评论 (4) 编辑

     摘要: Timus 1057. Amount of degrees 要求计算指定范围内能够由 K 个不同的 B 的幂次之和组成的整数的个数。这个程序的关键在于第 41 到 54 行的 GetNth 方法,该方法返回满足以下条件的第 N 个 B 进制整数:该整数中有 K 个 1,其余数字全部都是 0。  阅读全文
posted @ 2008-08-01 21:51 银河 阅读(907) | 评论 (2) 编辑

     摘要: 前几天,我发表了一篇随笔:“BigArithmetic - 提供任意精度的算术运算的静态类”。现在,让我们使用 BigArithmetic 类来计算圆周率。我们需要一个计算 π 的分析算法。有用的算法是二次收敛的,即每一次迭代使有效位数增加一倍。计算 π 的二次收敛算法是基于 ACM 法(算术几何平均法)。  阅读全文
posted @ 2008-07-29 21:34 银河 阅读(1410) | 评论 (6) 编辑

     摘要: Timus 1005. Stone pile 要求将若干石头分为两堆使其重量差最小。这道题是说,给你一堆石头,总数在 1 到 20 之间,每个石头的重量在 1 到 100,000 之间。要求你将这堆石头分成两堆,使这两堆石头的重量差最小,并输出这个重量差。  阅读全文
posted @ 2008-07-26 10:04 银河 阅读(1557) | 评论 (4) 编辑

     摘要: 我在“浅谈 BigInteger”的随笔中实现了一个 Skyiv.Numeric.BigInteger 类,那时乘法是使用常规的 O(N2) 的算法,所以比 .NET Framework 3.5 Base Class Library 中的 System.Numeric.BigInteger 类稍慢,后者的乘法是使用 Karatsuba 算法,其时间复杂度约为 O(N1.585)。  阅读全文
posted @ 2008-07-25 22:07 银河 阅读(2421) | 评论 (44) 编辑

     摘要: 在上一篇随笔“使用快速傅里叶变换计算大整数乘法”中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理。在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态类:BigArithmetic。  阅读全文
posted @ 2008-07-25 00:06 银河 阅读(1892) | 评论 (9) 编辑

     摘要:

我们知道,两个 N 位数字的整数的乘法,如果使用常规的算法,时间复杂度是 O(N2)。然而,使用快速傅里叶变换,时间复杂度可以降低到 O(N logN loglogN)。

  阅读全文
posted @ 2008-07-23 22:10 银河 阅读(3031) | 评论 (30) 编辑

     摘要: Timus 1603. Erudite 要求解一个字谜。这个题目首先给出一个 4x4 的字谜,然后给出许多单词,要求你判断这些单词是否能够由前面的字谜组成。规则是,你能够在字谜中上下左右行走,也能够拐弯,但是已经使用过的字母不允许再用。  阅读全文
posted @ 2008-07-16 20:47 银河 阅读(1158) | 评论 (0) 编辑

     摘要: Timus 1318. Logarithm 要求将一些 128-bit 数进行 XOR 运算后,取对数(只计算到整数部分),然后求它们的和。  阅读全文
posted @ 2008-07-14 22:41 银河 阅读(280) | 评论 (17) 编辑

     摘要: 本文介绍了四种可用于 C# 的 BigInteger 类:.NET Framework 3.5 Base Class Library 中的 System.Numeric.BigInteger、Skyiv.Numeric.BigInteger、ChewKeongTAN.BigInteger 和 java.math.BigInteger。并对她们进行比较。  阅读全文
posted @ 2008-07-13 21:25 银河 阅读(4065) | 评论 (21) 编辑

     摘要: Timus 1402. Cocktails 要求计算出鸡尾酒共有多少种调法。这道题目是说,给定 N (1 ≤ N ≤ 21) 种不同的原料,要求计算出总共能够调制出多少种不同的鸡尾酒。每种原料最多只能使用一次,但是投放原料的次序不同调制出来的鸡尾酒也不同。  阅读全文
posted @ 2008-07-10 09:36 银河 阅读(192) | 评论 (0) 编辑

     摘要:

Timus 1531. Zones on a plane 要求计算满足给定条件的简单多边形的个数。这道题目是说,在平原上有若干三角形组成的区域 Zi。Z1 包含两个等腰直角三角形,组成一个正方形。Zn+1 由 Zn 按以下方法生成:以 Zn 中的三角形的直角边作为新的等腰直角三角形的斜边,然后再移去 Zn 中的三角形,剩下的三角形就组成了 Zn+1。现在要求计算 Zn 中包含多少个简单多边形。

  阅读全文
posted @ 2008-07-06 19:07 银河 阅读(1196) | 评论 (0) 编辑

     摘要: Timus 1013. K-based numbers. Version 3 要求计算出不包括相邻的零的 N 位 K-进制数共有多少个。  阅读全文
posted @ 2008-07-04 19:22 银河 阅读(1094) | 评论 (1) 编辑

     摘要: 比较 C# 和 C/C++ 应用程序的性能  阅读全文
posted @ 2008-07-02 23:15 银河 阅读(3690) | 评论 (31) 编辑

     摘要: Timus 1219. Symbolic Sequence 要求输出满足给定条件的一百万个小写拉丁字母。  阅读全文
posted @ 2008-07-01 23:41 银河 阅读(231) | 评论 (0) 编辑

     摘要: Timus 1081. Binary Lexicographic Sequence 要求给出第 K 个 N 位二进制数,该二进制数不得有相邻的“1”。  阅读全文
posted @ 2008-06-30 21:09 银河 阅读(1534) | 评论 (5) 编辑

     摘要: Timus 1152. The False Mirrors 说述消灭怪物的故事,故事中的主角周围环绕着一圈 N (3 ≤ N ≤ 20) 个阳台,每个阳台上有若干个怪物。主角每开一枪能够摧毁相邻的三个阳台,然后幸存的怪物还击,假设每个怪物每次攻击对主角的伤害都是一个单位。然后开始新一轮枪战,直到消灭所有的怪物。你的任务就是计算出主角受到的最小伤害。  阅读全文
posted @ 2008-06-28 14:00 银河 阅读(1212) | 评论 (3) 编辑

     摘要: Timus 1010. Discrete Function 要求根据给定的离散函数在直角坐标系中的对应点的连线中找出倾角最大的。  阅读全文
posted @ 2008-06-26 22:35 银河 阅读(189) | 评论 (0) 编辑

     摘要: Timus 1150. Digits 要求计算 1 到 N 的正整数中包含 0 .. 9 的数目。  阅读全文
posted @ 2008-06-25 23:35 银河 阅读(878) | 评论 (1) 编辑

     摘要: Timus 1153. Supercomputer 要求根据自然数列的前 N 项和求 N 值。  阅读全文
posted @ 2008-06-24 23:29 银河 阅读(199) | 评论 (0) 编辑

     摘要: Timus 1114. Boxes 要求计算出将两种颜色的球放到盒子中的各种组合的数目。  阅读全文
posted @ 2008-06-24 09:53 银河 阅读(260) | 评论 (0) 编辑

     摘要: Timus 1108. Heritage 要求对给定的若干继承人作出一个遗产分配方案。  阅读全文
posted @ 2008-06-23 16:34 银河 阅读(210) | 评论 (0) 编辑

     摘要: Timus 1028. Stars 要求计算直角坐标系中星星的等级。  阅读全文
posted @ 2008-06-22 10:08 银河 阅读(206) | 评论 (0) 编辑

     摘要: Timus 1015. Test the Difference! 要求将赌场中的骰子分类。  阅读全文
posted @ 2008-06-21 15:57 银河 阅读(238) | 评论 (0) 编辑

     摘要: Timus 1032. Find a multiple 要求在 N 个正整数中找出其中若干个使得它们的和是 N 的倍数。  阅读全文
posted @ 2008-06-21 10:13 银河 阅读(251) | 评论 (0) 编辑

     摘要: Timus 1011. Conductors 要求根据售票员所占比例范围计算叶卡特琳堡的最小总人口数。  阅读全文
posted @ 2008-06-20 11:29 银河 阅读(283) | 评论 (0) 编辑

     摘要: Timus 1079. Maximum 要求输出指定数列中的最大值。  阅读全文
posted @ 2008-06-19 11:53 银河 阅读(247) | 评论 (0) 编辑

     摘要: Timus 1601. AntiCAPS 要求把一段大写英文字母的文本转换为适当的小写英文字母。  阅读全文
posted @ 2008-06-18 15:57 银河 阅读(262) | 评论 (0) 编辑

     摘要: 俄罗斯乌拉尔大学在线题库Sphere Onlile Judge (SPOJ) 都是可以使用C#语言的在线ACM题库,有兴趣的朋友可以去试试。  阅读全文
posted @ 2008-06-07 20:43 银河 阅读(5252) | 评论 (37) 编辑

     摘要: 数独游戏 在9x9的方格内进行, 分为3x3的小方格,被称为“区”。
数独游戏首先从已经填入数字的格子开始。
数独游戏的目的是根据下列规则,用1至9之间的数字填满空格:
每个数字在每一行、每一列和每一区只能出现一次。
我在 Linux 服务器上用 ASP.NET 2.0 实现了一个数独解算器。
  阅读全文
posted @ 2007-01-26 15:09 银河 阅读(9090) | 评论 (23) 编辑

     摘要:  关于圆周率,可参阅“维基百科-圆周率”。我前天在博客园也发表了一篇随笔:“计算圆周率的C程序” 。这个C#版的计算圆周率程序就是在C程序的基础上改写的。C#版的程序必须使用C#2.0编译,算法和C程序是一样的,都是利用圆周率的反正切展式的泰勒级数来计算,但C#程序充分使用面象对象的编程方法,并且程序中有适当的注释,比C程序容易理解多了。C#程序从配置文件中读取计算所用的公式,允许自己增加计算公式。  阅读全文
posted @ 2005-09-30 11:22 银河 阅读(3577) | 评论 (16) 编辑

     摘要: 这是很早以前用C语言写的一个计算圆周率的程序, 算法是用泰勒公式计算反正切值。在命令行不跟参数执行该程序则使用Gauss公式计算前1000位圆周率的值,如果带一个命令行参数,则该值为要计算的位数。如果还有第二个命令行参数,则使用Stomer公式计算,可作为验算。因为该程序只涉及到纯数学计算,可以在Linux、Unix、Windows等操作系统下编译并运行。当时写这个程序时,int是2个字节的,现在大多数的C编译器int都是4个字节,不过这不影响程序的正确性。
  阅读全文
posted @ 2005-09-28 15:30 银河 阅读(2017) | 评论 (5) 编辑