zoukankan      html  css  js  c++  java
  • 小算法总结

    最大子序列和

    dp转移方程  sum[i] = max{sum[i-1]+a[i],a[i]}

    int MaxSum(int n)
    {
        int sum=0,tmp=0;
        for(int i=0;i<n;i++)
        {
            if(tmp>0)
                tmp+=a[i];
            else
                tmp=a[i];
            if(tmp>sum)
                sum=tmp;
        }
        return sum;
    }
    

      

    递归求全排列

    先处理第一层,比如123  第一位置分别和第一个位置、第二个位置、第三个位置交换 ->{123  213  321}

    再递归处理第二层  比如 123 第二位置分别和第二位置、第三位置交换 ->{ 123 132}

    再递归处理第三层 比如 123 第三位置和第三位置交换 ->{123}

    然后就是回溯分别处理

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    
    int ans = 0;
    
    void permutation(int k, int n, int a[])
    {
        if(k == n-1){
            ans+=1;
            for(int i = 0; i < n; ++i)
                printf("%d ", a[i]);
            puts("");
        }else{
            for(int i = k; i < n; ++i){
                swap(a[k],a[i]);
                permutation(k+1, n, a);
                swap(a[k],a[i]);
            }
        }
    }
    
    int main()
    {
        freopen("1.txt","w",stdout);
        int a[100];
        int n = 3;
        for(int i = 0; i < n; ++i)
            a[i] = i+1;
        permutation(0, n, a);
        printf("%d
    ",ans);
        return 0;
    }
    

      

    筛素数

    import timeit
    
    def eratosthenes(n):
        l = list(range(1,n+1))
        l[0] = 0
        for i in xrange(2, n+1):
            if l[i-1] != 0:
                for j in xrange(i*2, n+1, i):
                    l[j-1] = 0
        result = [x for x in l if x != 0]
    
        return result
    
    def sushu(n):
        result = []
        for x in xrange(2,n+1):
            for y in xrange(2,x):
                if x % y == 0:
                    break
            else:
                result.append(x)
        return result
    
    t1 = timeit.Timer('print sushu(10000)', setup='from __main__ import sushu')
    t2 = timeit.Timer('print eratosthenes(10000)', setup='from __main__ import eratosthenes')
    
    print t1.timeit(1)
    print t2.timeit(1)
    

     0.284128189087

     0.002876996994

    可以很明显的看出,埃氏筛法确实快。复习一下!!

     多做点记录,只有好处,没坏处。认真一点,进个大公司!

  • 相关阅读:
    laravel5.5
    yii2.0 Activeform表单部分组件使用方法
    putty连接远程局域网的MySql(不需要单独打开plink)
    关于 CentOS 自启动(服务、脚本)
    make -j 多核并行编译 导致笔记本过热 自动关机保护
    CentOS 7 引导 -- GRUB2
    Centos 7 拨号上网(PPPOE)
    Centos 7 意外断电如何处理
    Windows/Linux 生成iOS证书及p12文件
    git add -f
  • 原文地址:https://www.cnblogs.com/ya-cpp/p/7622997.html
Copyright © 2011-2022 走看看