C++ 排列最优解算法思想
枚举全排列
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
/**
枚举ABC 的全排列
*/
for(char a='A'; a<='C'; a++)
{
for(char b='A'; b<='C'; b++)
{
if(a==b) continue;
for(char c='A'; c<='C'; c++)
{
if(c==a||c==b)continue;
else
cout<<a<<" "<<b<<" "<<c;
}
cout<<endl;
}
}
return 0;
}
解决匹配算式问题
ABCD * E = DCBA
数的范围最小值在 1023 最大值在 9876
方式解决拆分:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
int num1,num2,A,B,C,D,E;
for(num1=1023;num1<=9876;num1++){
A=num1/1%10;
B=num1/10%10;
C=num1/100%10;
D=num1/1000%10;
if(D==0||A==B||A==C||A==D||B==C||B==D||C==D)continue;
num2=A*1000+B*100+C*10+D;
for(E=2;E<=9;E++){
if(E==A||E==B||E==C||E==D)continue;
if(E*num1==num2){
cout<<num1<<"*"<<E<<"="<<num2;
}
cout<<endl;
}
}
return 0;
}
贪心解决 最值问题
规则: 利用局部最优解 加起来求总的 全局最优解是贪心法的主要规则
例: 在 5 6 2 9 4 1 求能组成的饿最大三位数
难点: 位数如何去控制 ,可以考虑使用 循环除 缩小 范围的方式安排
for(int a=100;a>0;a/=10;)
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
int pro[]={5,6,2,9,4,1};
int current=0,MAX=10;int num=0;
int len=sizeof(pro)/sizeof(pro[0]);
for(int a=100;a>0;a/=10){
current=0;/归位
for(int b=0;b<len;b++){
if(pro[b]>current&&pro[b]<MAX){
current=pro[b];
}
}
MAX=current;
num+=current*a;
}
cout<<num;
return 0;
}
二分查找
思想 : 在一组 确定排好序的 数组中 定位中点 把需要查找的值与中间的值进行比较如果是相同的值 ,则找到,如果不是又比当前值大 则继续在右边进行查找, 小于则继续在左边值进行查找, 直到找到位置.
复杂度为 线性序列
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
int pro[]={5,6,2,9,4,1,25,65,24,15,77};
sort(pro,pro+sizeof(pro)/sizeof(pro[0]));
int low ,mid,high;
low=0;high=sizeof(pro)/sizeof(pro[0])-1;
int findn;
cin>>findn;
while(low<=high){
mid=(low+high)/2;
if(pro[mid]==findn) break;
if(findn>pro[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
if(low>high) cout<<"no find";
else
cout<<"find x:"<<mid;
return 0;
}
暴力枚举子串
外两成循环的维持梯度控制,最后一层循环维持如果存在子串 那么继续拆分。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
string str;
cin>>str;
char a[str.length()];
int i,j,k;
for(i=0;i<str.length();i++){
for(j=i;j<str.length();j++){
for(k=i;k<=j;k++){
a[k-i]=str[k];
}
a[j-i+1]='\0';
cout<<a<<endl;
}
}
return 0;
}
LCS问题
package com.dsw.test;
public class CalculateMaxString {
public static void main(String[] args) {
String src = "abcdefghijklmnopqrstuvwxyz";
String tar = "1234567890abcdfrgtddd12321414";
char [] srcCh = src.toCharArray();
char [] tarCh = tar.toCharArray();
int count = 0;
int max = 0;
StringBuilder sb = null;
String maxString = null;
for(int i=0;i<srcCh.length;i++)
for(int j=0;j<tarCh.length;j++){
sb = new StringBuilder();
int k=j;
int m = i;
count = 0;
while(srcCh[m] == tarCh[k]){
count++;
sb.append(tarCh[k]);
k++;
m++;
}
if(count > max){
max = count;
maxString = sb.toString();
}
}
System.out.println("原字符串:" + src);
System.out.println("子字符串:" + tar);
System.out.println(maxString);
}
}
C++ 排列最优解算法思想的更多相关文章
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- 排列组合算法(PHP)
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...
- C#语法灵活运用之排列组合算法
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...
- AC自动机——多模式串匹配的算法思想
标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...
- JVM三种垃圾收集算法思想及发展过程
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...
- 排列熵算法简介及c#实现
一. 排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...
- 基本算法思想Java实现的详细代码
基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...
- 基本算法思想之递推算法思想(C++语言描述)
递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...
随机推荐
- Unity中List的随机排序(乱序)
为什么要给List排序做一个Unity限定条件呢 首先,是C#中的List泛型,若是Java,直接调用Collection.shuffle()就OK了 而Unity的C#版本较低,不能使用Random ...
- mysql备份并转移数据
一.使用mysqldump进行备份 直接输入命令mysqldump会发现提示命令不存在,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下, 自然会找不到命令,并报错.知道了问题 ...
- svn从Windows服务器上迁移到Linux上
svn从Windows服务器迁移到Linux服务器 author:headsen chen 2017-10-16 16:50:32 个人原创,转载请注明.否则依法追究法律责任 ...
- 分享一个命令行计算器-bc
分享一个命令行计算器-bc 假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它 ...
- 微信公众号开发,weUi组件,问题总结
1.实现上拉分页,Google兼容问题,weui框架提供的模板是这样的($(document.body).infinite()),在body定一个div通过这个div,实现上拉 $('#wrapper ...
- UnderScore的使用实例记录
集合操作 _.range(),主要用于区间的获取操作.参数说明:(param1):范围上限,(param1,param2):起始及结束范围,(param1,param2,param3):起始结束范围, ...
- Java多线程JUC
1. volatile 关键字 多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从主存取到数据,然后放到自己的缓冲区中,在 ...
- table 表格的增删和修改
如上图,图片的增删都没有问题:唯一的问题就是我改变下一行的内容时,把上面一行给覆盖了,费了好久,终于找到原因了,直接贴代码: 效果如下:
- Anagram
Anagram poj-1256 题目大意:给你n个字符串,求每一个字符串所有字符的全排列,按照顺序输出所有全排列. 注释:每一个字符长度小于13,且字符排序的顺序是:A<a<B<b ...
- SpringAOP-JDK 动态代理和 CGLIB 代理
在 Spring 中 AOP 代理使用 JDK 动态代理和 CGLIB 代理来实现,默认如果目标对象是接口,则使用 JDK 动态代理,否则使用 CGLIB 来生成代理类. 1.JDK 动态代理 那么接 ...