经典算法——字符串的所有组合

#include<iostream>
#include<vector>
#include<string.h>
using namespace std;

//从头扫描字符串得到第一个字符,针对第一个字符,有两种选择
//把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;
//如果不把这个字符放到组合中去,则需要在剩下的n-1个字符中选取m个字符
void Combination(char* string, int number, vector<char>& result)
{
	if (number == 0)
	{
		vector<char>::iterator iter = result.begin();
		for (; iter < result.end(); ++iter)
			cout << (*iter);
		cout << endl;
		return;
	}
	if (*string == '\0')
		return;
	result.push_back(*string);
	Combination(string + 1, number - 1, result);//把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符
	result.pop_back();
	Combination(string + 1, number, result);//不把这个字符放到组合中去,则需要在剩下的n-1个字符中选取m个字符
}

void Combination(char* string)
{
	if (string == NULL)
		return;
	int length = strlen(string);
	vector<char> result;
	for (int i = 1; i <= length; i++)
	{
		Combination(string, i, result);
	}
}

int main()
{
	char s[] = "abc";
	Combination(s);
	system("pause");
	return 0;
}

时间: 2024-10-12 17:54:38

经典算法——字符串的所有组合的相关文章

经典算法——字符串的全部组合

#include<iostream> #include<vector> #include<string.h> using namespace std; //从头扫描字符串得到第一个字符,针对第一个字符,有两种选择 //把这个字符放到组合中去,接下来我们须要在剩下的n-1个字符中选取m-1个字符: //假设不把这个字符放到组合中去.则须要在剩下的n-1个字符中选取m个字符 void Combination(char* string, int number, vector&

[经典算法] 字符串相似度-编辑距离

题目说明: 一种衡量两个字符串之间的差异性的方法是,计算两个字符串转换时候需要的最少操作,需要的操作越少说明这两个字符串越相似. 题目解析: 假设字符串的操作只有三种: 插入一个字符: 删除一个字符: 替换一个字符: 两个字符串之间的编辑距离定义为:从字符串str1到str2的最少的操作次数.首先,编辑距离是不会大于str1.length + str2.length的.假设求字符A.B的编辑距离,考虑下面几种情况: 如果A[i] = B[j],那么这时候还需要操作吗? 这个时候的删除和替换操作只

经典算法题每日演练——第五题 字符串相似度

原文:经典算法题每日演练--第五题 字符串相似度 这篇我们看看最长公共子序列的另一个版本,求字符串相似度(编辑距离),我也说过了,这是一个非常实用的算法,在DNA对比,网 页聚类等方面都有用武之地. 一:概念 对于两个字符串A和B,通过基本的增删改将字符串A改成B,或者将B改成A,在改变的过程中我们使用的最少步骤称之为“编辑距离”. 比如如下的字符串:我们通过种种操作,痉挛之后编辑距离为3,不知道你看出来了没有? 二:解析 可能大家觉得有点复杂,不好理解,我们试着把这个大问题拆分掉,将"字符串

记录几个经典的字符串hash算法

记录几个经典的字符串hash算法,方便以后查看: 推荐一篇文章: http://www.partow.net/programming/hashfunctions/# (1)暴雪字符串hash 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <stdint.h> 5 #include <stdbool.h> 6 7 #define MAXTABL

数据挖掘十大经典算法

一. C4.5  C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3 算法.   C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足: 2) 在树构造过程中进行剪枝: 3) 能够完成对连续属性的离散化处理: 4) 能够对不完整数据进行处理. C4.5算法有如下优点:产生的分类规则易于理解,准确率较高.其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导

机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用

摘要: 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类.总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型:当各特征相关性较小时,朴素贝叶斯分类性能最为良好.另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算.本文详述了朴素贝叶斯分类的统计学

经典算法宝典——贪婪思想(五)(1)

贪婪法(Greedy)又叫登山法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但适用范围有限的策略."贪婪"可以理解为以逐步的局部最优,达到最终的全局最优. 贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择.一定要注意,选择的贪婪策略要具有无后向性,即某阶段状态一旦确定以后,不受这个状态以后的决策影响.也就是说某状态以后的过程不会影响以前的状态,只与当前状态有关,也称这种特性为无后效性.因此,适应用贪婪策略解决的问题类型较少,对所采用的贪婪策略一

【经典算法大全】收集51种经典算法 初学者必备

<经典算法大全>是一款IOS平台的应用.里面收录了51种常用算法,都是一些基础问题.博主觊觎了好久,可悲哀的是博主没有苹果,所以从网上下了老奔的整理版并且每个都手敲了一遍. 虽然网上也有博客贴了出来,但是自己写写感觉总是好的.现在分享个大家. 代码和运行结果难免有出错的地方,请大家多多包涵. 1.河内之塔(汉诺塔) 2.费式数列 3.巴斯卡三角形 4.三色棋 5.老鼠走迷宫(1) 6.老鼠走迷宫(2) 7.骑士走棋盘 8.八皇后 9.八枚银币 10.生命游戏 11.字串核对 12.双色河内塔,

经典算法大全

原文地址:经典算法大全 作者:liurhyme 经                                                                    典                                                                    算                                                                    法