程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

06 2013 档案

封装的意义
摘要:封装的意义前面《组合序列、排列序列的生成实现》中,我们在最后讨论了如何对组合序列生成函数、排列序列生成函数进行封装,组合序列生成函数定义如下:void comb(const vector& arr, int beg, int m, vector >& coms, vector& tmp, int& total){ if (m > arr.size() - beg) { return; } if (m == 0) { coms.push_back(tmp); ++total; } else { ... 阅读全文

posted @ 2013-06-30 22:45 unixfy 阅读(763) 评论(0) 推荐(0) 编辑

递归的讨论
摘要:递归的讨论 递归是一个强大的工具,用递归写的程序往往比较容易理解和实现。但是当面对一些递归性问题的时候,我们的第一感觉就是用递归程序实现,但是从问题到最终的实现程序之间需要经过什么?怎样才能写出正确的递归程序?我们将在这里进行关于递归的讨论。 我们首先介绍两个简单的递归实现程序,然后讨论循环与递归的关系,再结合之前递归程序,讨论如何才能写出正确的递归程序。一、两个简单的递归程序这里我们讨论阶乘的计算和斐波那契数列的计算。首先我们给出这两个的非递归实现:// 阶乘与斐波那契数列的非递归实现#include using namespace std;int fact(int n){ if (n... 阅读全文

posted @ 2013-06-29 02:34 unixfy 阅读(244) 评论(0) 推荐(0) 编辑

组合序列、排列序列的生成实现
摘要:组合序列、排列序列的生成实现 前面我们已经讨论了关于组合数、排列数的生成《排列、组合的计算》,并没有涉及组合序列和排列序列是如何生成的。这里我们将讨论序列和排列序列是如何生成的,首先我们讨论组合序列。一、组合序列假如有如下集合(注意,集合中的元素是互异的):0, 1, 2, 3, 4, 5, 6, 7, 8, 9 我们从该集合中选取3个元素,问有多少种组合,这些组合具体是什么? 首先,我们给出程序如下:// 组合序列的生成#include #include using namespace std;void comb(const vector& arr, int beg, int m, 阅读全文

posted @ 2013-06-28 22:53 unixfy 阅读(874) 评论(0) 推荐(0) 编辑

摘要:堆 本文我们重点讨论堆,堆分为最小堆和最大堆两种,由于两者操作操作类似,所以我们只讨论最小堆(在实现的过程中我们定义了compare函数,可以同时适用于最小堆和最大堆)。 最小堆的定义如下:A[i] #include using namespace std;typedef bool (*cmp_fun)(int a, int b);void display(const vector& arr){ for (vector::size_type i = 0; i != arr.size(); ++i) { cout b;}bool exchange(int& a, in... 阅读全文

posted @ 2013-06-27 00:54 unixfy 阅读(572) 评论(0) 推荐(0) 编辑

二分查找细则讨论
摘要:二分查找细则讨论 二分查找有两种实现方式:非递归和递归。我们首先给出非递归的实现,然后对其中的细则进行讨论。之后,我们再讨论递归实现的细则。一、非递归实现 这里我们假设待查找序列是有序且互异的。#include #include using namespace std;void nonrec_binary(const vector& arr, int n, int& pos){ pos = -1; assert(arr.size() > 0); int left = 0, right = arr.size() - 1, middle = 0; while (left .. 阅读全文

posted @ 2013-06-23 18:54 unixfy 阅读(243) 评论(0) 推荐(0) 编辑

从每组中依次选择一个元素
摘要:从每组中依次选择一个元素 假设有N组元素,从N组中依次选取一个元素组成一个序列。假如N组元素的个数依次为A1,A2,…,AN,那么得到的序列数应该为A1*A2*…*AN。 下面我们关注的是如何生成A1*A2*…*AN个序列。由于N是个变量,如果是用N个循环实现,只能针对特定的N个组的情况。并且如果N很大时,实现起来不现实。 这里我们采用递归的方法来实现。// 递归实现#include #include #include using namespace std;void foo(const vector >& src, int x, int n, int& total, v 阅读全文

posted @ 2013-06-23 02:18 unixfy 阅读(343) 评论(0) 推荐(0) 编辑

如何生成升序序列
摘要:如何生成升序序列一个由3个数字组成的序列:ABC,0using namespace std;int main(){ int total = 0; for (int A = 0; A != 10; ++A) { for (int B = A; B != 10; ++B) { for (int C = B; C != 10; ++C) { ++total; } } } cout #include using namespace st... 阅读全文

posted @ 2013-06-22 11:35 unixfy 阅读(562) 评论(0) 推荐(0) 编辑

计算序列中元素的位置
摘要:计算序列中元素的位置 寻找序列中元素的位置,这里序列是有序的。根据序列中元素是否有重复分为无重复序列和有重复序列两种情况。一、无重复的情况:我们只考虑升序的情况,降序的情况与此类似,故不作讨论。比如,有以下序列:3、5、6、8、9、10、15、30、41 待查找元素为15,其位置为6(3的位置为0,位置从0开始计算),其逆位置为2 如果待查找元素在序列中不存在,则返回位置-1,逆位置也是-1。1)顺序查找 最直观的的方法是顺序查找,程序实现如下:// 无重复顺序查找#include <iostream>#include <vector>using namespace s 阅读全文

posted @ 2013-06-22 00:00 unixfy 阅读(677) 评论(0) 推荐(0) 编辑

如何判断是否中奖
摘要:如何判断是否中奖问题描述:假设开奖结果为:A B C,A、B、C可能相同也可能不同,抽奖结果为:X Y Z,X、Y、Z可能相同也可能不同。如何判断A B C与X Y Z有多少个相同的数字。本质上是求两个集合的交集。交集操作:1) 直观的做法:针对集合2种的每个元素,查找其在集合1种是否出现了,如果出现则纳入集合3。对集合2种的元素操作完后,对得到的集合3进行去重,即为交集。如果是顺序查找则时间复杂度是O(M*N)——实现1如果是二分查找,二分查找的前提是排序,则时间复杂度是O(N*logN)或O(M*logM)。 2)改进的做法:分别对集合1、2排序,顺序扫描,进行判断,对匹配的元素纳入交集。 阅读全文

posted @ 2013-06-20 22:45 unixfy 阅读(341) 评论(0) 推荐(0) 编辑

排列、组合的计算
摘要:排列、组合的计算排列从N中选择出M个元素,且保持选择的有序,每选择出M个元素后,将其看做是一组样本,那么样本总数为A(N, M)。A(N, M) = N * N-1 * … * N-M+1 如果M=0,定义A(N, 0) = 1; 如果M=N,则A(N, N) = N * N-1 * N-2 * … * 3 * 2 * 1 = N!(N的阶乘)。组合从N中选择出M个元素,如果不考虑顺序,则样本总数为C(N, M)。C(N, M) = (N * N-1 * … * N-M+1) / (M *M-1 * M-2 * … * 3 * 2 * 1) 如果M=0,定义C(N, 0) = 1; 如果M=N 阅读全文

posted @ 2013-06-20 21:05 unixfy 阅读(601) 评论(0) 推荐(0) 编辑

一个抽奖模型的求解
摘要:一个抽奖模型的求解2013-06-19问题描述: 有3组数,分别都是 [0-9] 10个数字,从中随机分别各选择1个数字,不分先后顺序,作为开奖结果。开奖结果设定后,从中随机分别各选择1个数字,不分先后顺序,作为抽奖结果。 如果3个数字与开奖结果完全匹配,则是一等奖; 如果2个数字与开奖结果匹配,则是二等奖; 如果1个数字与开奖结果匹配,则是三等奖; 如果没有任何数字与开奖结果匹配,则不中奖; 问:1. 开奖结果总共有多少种? 2. 一、二、三等奖的概率各是多少?求解过程: 首选计算开奖结果有多少种。从3组 [0-9] 10个数字中各选1个数字,那么有10^3=1000种情况,但是这是有序的情 阅读全文

posted @ 2013-06-19 23:48 unixfy 阅读(486) 评论(0) 推荐(0) 编辑

关于·我
摘要:关于·我 在博客园安家啦! 不做搬运工(因为搬运不起任何正作用),杜绝吐槽,只做原创。 这里的一切都是思考的产物。 但很多都是浮云 个人信息 说明 类别 明细 百度空间 http://hi.baidu.com/unixfy 主要记录读研阶段的所学、所想、所感 共计<1784>篇记录 程序设计语言(C 阅读全文

posted @ 2013-06-18 21:11 unixfy 阅读(452) 评论(1) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示