![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 54
BJM_
探索未知,崇尚自由。
展开
-
求最多不相交区间的个数
/*******************************************贪心法 选择不相交区间输入n个区间 尽最大可能的选择多个没有公共交点的区间取第一个可用区间永远是对的********************************************/#include#includestruct qujian{ float begin ,end原创 2017-08-21 14:54:31 · 1025 阅读 · 0 评论 -
贪心算法:最优装载问题(C++实现)
概念:当一个问题具有最优子结构性质时,可用动态规划算法,有时会有更简单有效的算法,那就是贪心算法,贪心算法是通过一系列的选择来得到问题的解,贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优解。但对范围相当广的许多问题能产生整体最优解。在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解。贪心算法的基本要素:贪心选择性质:所求解的问题的...原创 2019-06-22 11:16:31 · 8336 阅读 · 1 评论 -
动态规划:矩阵连乘问题(C++实现,含备忘录方法)
动态规划与分治法的异同:相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题往往不是相互独立的。有些问题分解后的子问题往往是重复的,此时若用分支法则会重复计算耗费时间内存。总结:为了达到避免重复计算,可以用一个表来记录所有已解决的子问题的答案。不管该子问题以后是否被用...原创 2019-06-20 17:10:47 · 25013 阅读 · 4 评论 -
递归:归并排序(Java实现)
算法思路:将待排序的数据先一分为二,接着再将者两部分合并,合并到一个备用数组中,合并的时候对比两边数据当前的值的大小,再选择一个加入到排好序的数组中,最后将备用数组的值复制回原数组。算法如下:Void MergeSort(int a[], int left, int right){ if(left<right) //至少两个元素 { int i = (lef...原创 2019-06-19 18:04:09 · 1407 阅读 · 0 评论 -
递归:整数划分问题(Java实现)
n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m);举个例子,当n=5时我们可以获得以下这几种划分(注意,例子中m>=5)...原创 2019-06-19 16:50:00 · 2500 阅读 · 0 评论 -
递归:斐波那契数列Logn复杂度(Java实现)
斐波那契数列的定义:用递推地方式的方法可以得方式得出如下结论:所以要求第n项的值变成了求矩阵与矩阵的相乘,还有矩阵的n次幂的求法。 求一个数或矩阵数的n次幂的O(logn)复杂度的求法: 整数的n次幂可以划分为如上的两部分来计算,,对于无论是奇数还是偶数,只要指数右移一位就可以,当是奇数时,最后再乘...原创 2019-06-19 16:31:11 · 847 阅读 · 0 评论 -
用实例讲解RSA加密算法(详细)
图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年 RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间...转载 2018-12-20 08:44:14 · 1790 阅读 · 1 评论 -
第四届蓝桥杯第39级台阶(结果填空)
第39级台阶小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?请你利用计算机的优势,帮助小明寻找答案。#include <iostream> using names...原创 2018-03-27 22:53:50 · 255 阅读 · 0 评论 -
求最长子序列
/**************************************************** 求最长子序列****************************************************/#include#include#define Max_Num 1010int b[Max_Num],Ma原创 2017-08-18 17:32:22 · 215 阅读 · 0 评论 -
huffman编码的实现与详解
首先我们看看它的原理。过程很简单1:首先定义结构体/* *************huffman code的实现**************** */#include#include#includetypedef struct{ float weight; int parent,lchild,rchild; char value;原创 2017-05-15 14:01:46 · 596 阅读 · 0 评论 -
前缀表达式运算
递归#include#includedouble expt(){ char a[10]; scanf("%s",a); switch(a[0]){ case '+': return expt() + expt(); case '-': return expt() - expt(); case '*'原创 2017-08-15 17:18:06 · 321 阅读 · 0 评论 -
高精度算法
大整数加法#include#include#define MAX_LEN 200char s1[MAX_LEN+10],s2[MAX_LEN+10];int a1[MAX_LEN+10],a2[MAX_LEN+10];int main(){ int i,j,nlen1,nlen2,flag=0; gets(s1); gets(s2); memse原创 2017-08-17 10:12:46 · 201 阅读 · 0 评论 -
动态规划--数字三角形
动规解题的一般思路1、将原问题分解为子问题把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决(数字三角形例)子问题的解一旦求出就会被保存,所以每个子问题只需求解一次。2、确定状态在用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。一个“状态”对应于一个或多个子问题,所谓某个“状态”下原创 2017-08-18 11:09:44 · 482 阅读 · 0 评论 -
区间覆盖问题
给你n个区间以及所要覆盖的一段线段【begin,end】,如何最少的使用已有区间来覆盖思路很简单,将所给的区间初始位置按照从小到大进行排序,每次只取begin(线段有线段的begin end,区间也有区间的begin和end)前的区间进行比较,并将其中区间end最大的取出来使用,并把该区间的end作为新的线段的begin 不断重复1 如果取完发现区间的end小于begin则无法成功;原创 2017-08-22 15:48:33 · 276 阅读 · 0 评论 -
回溯法:0-1背包问题(C++实现)
概念:回溯法是一种非常有效的方法,有“通用的解题法”之称。它有点像穷举法,但是更带有跳跃性和系统性,他可以系统性的搜索一个问题的所有的解和任一解。回溯法采用的是深度优先策略。 回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐...原创 2019-06-23 20:42:15 · 17380 阅读 · 15 评论