数据结构与算法之排列与组合算法



数据结构与算法之排列与组合算法。1. 前言,本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。

2. 排列算法

常见的排列算法有:

(A)字典序法

(B)递增进位制数法

(C)递减进位制数法

(D)邻位对换法


(E)递归法

介绍常用的两种

(1) 字典序法

对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。

[例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。

生成给定全排列的下一个排列 所谓一[......]

Read more

c++数据结构与算法之图搜索

c++数据结构与算法之图搜索,1. 介绍,本文介绍了比较初级的图搜索算法,包括深度优先遍历,广度优先遍历和双向广度优先遍历。

2. 深度优先遍历DFS

2.1 算法思想

从图中某个顶点v开始,访问此节点,然后依次从v中未被访问的邻接点出发深度优先遍历图,直到图中上所有和v有路径相通的顶点都被访问;若此时图中尚有顶点未被访问,则另选图中一个未被访问顶点做起点,重复以上过程,直到图中所有顶点都被访问为止。

深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是所有顶点均未被访问过,在G中任选一个顶点i作为遍历的初始点,则深度优先搜索遍历可定义如下:

(1) 首先访问[......]

Read more

c++素数判定算法实例源码介绍

c++素数判定算法实例源码介绍。

1. 素数判定问题
素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法。
2. 原始算法
素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数。根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数。

bool is_primer1(int num) {

int i;

for(i = 2; i < num; i++) {

if(num % i == 0) {

return true;

}

}

return false;[......]

Read more

c++数据结构与算法之红黑树图文教程

c++数据结构与算法之红黑树图文教程。1. 简介

红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除等操作。

本文介绍了红黑树的基本性质和基本操作。

2. 红黑树的性质

红黑树,顾名思义,通过红黑[......]

Read more

背包问题应用图文教程

背包问题应用图文教程,1. 背包问题介绍

背包问题不单单是一个简单的算法问题,它本质上代表了一大类问题,这类问题实际上是01线性规划问题,其约束条件和目标函数如下:

自从dd_engi在2007年推出《背包问题九讲》之后,背包问题的主要精髓基本已道尽。本文没有尝试对背包问题的本质进行扩展或深入挖掘,而只是从有限的理解(这里指对《背包问题九讲》的理解)出发,帮助读者更快地学习《背包问题九讲》中的提到的各种背包问题的主要算法思想,并通过实例解释了相应的算法,同时给出了几个背包问题的经典应用。

2. 背包问题及应用

dd_engi在《背包问题九讲》中主要提到四种背包问题,分别[......]

Read more

Cassandra中实现SQL操作图文介绍

Cassandra中实现SQL操作图文介绍。NoSQL数据库是为高扩展性系统设计的。它采用了key/value模型,它的缺点,正如NoSQL名字表明地那样,不支持SQL操作。这听起来像是一个很严重的缺陷—我们怎样对NoSQL上的数据进行“select”,“join”,“group”和“sort”操作?本文介绍了这些操作怎样在cassandra中自然而又有效的实现。

为了能够较清楚的阅读本文,读者需要先明白Cassandra的数据模型,可阅读这篇文章:“Cassandra数据模型”。Cassandra数据模型的优势在于,它通过一个高效的迭代框架(通过column和super column)[......]

Read more

Cassandra客户端

Cassandra客户端。

1. 前言
关系数据库中允许client通过dirver(JDBC,ADO等)数据访问和检索,如,在java中,JDBC API封装了关系数据库中供应商的实现,提供了数据访问和检索的统一接口(使用Statements, Prepared-Statements, ResultSets等)。然而,在Cassandra中,不存在这样的dirver,它使用Thrift API和Avro RPC框架提供了一个client代码生成层,用户可根据Cassandra提供的.thrift和.genavro文件使用Thrift API(关于thrift介绍,可参见这篇文章:“T[......]

Read more

Cassandra部署与安装图文教程

Cassandra部署与安装图文教程。

1. 前言

学习Cassandra的基础是先把Cassandra系统部署起来,然后简单的使用它,从直观上感觉它,然后逐步的深入了解它。

本文介绍了Cassandra集群的部署方法,包括配置,安装和简单的使用。

2. 下载版本

Cassandra版本一直在更新,且每次更新,变化均比较大,如配置文件有改动,Thrift接口定义文件有改动等。本文采用的版本是0.7.6-2,可以从这里下载:http://cassandra.apache.org/download/。

3. Cassandra目录结构

Read more

Apache Spark三种分布式部署方式比较

Apache Spark探秘:三种分布式部署方式比较.目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配)。本文将介绍这三种部署方式,并比较其优缺点。

standalone模式,[......]

Read more

Apache Spark多进程模型还是多线程模型?

Apache Spark探秘:多进程模型还是多线程模型?Apache Spark的高性能一定程度上取决于它采用的异步并发模型(这里指server/driver端采用的模型),这与Hadoop 2.0(包括YARN和MapReduce)是一致的。Hadoop 2.0自己实现了类似Actor的异步并发模型,实现方式是epoll+状态机,而Apache Spark则直接采用了开源软件Akka,该软件实现了Actor模型,性能非常高。尽管二者在server端采用了一致的并发模型,但在任务级别(特指Spark任务和MapReduce任务)上却采用了不同的并行机制:Hadoop MapReduce采用了多[......]

Read more