算法
hard_man
这个作者很懒,什么都没留下…
展开
-
中国剩余定理(孙子定理)的证明和c++求解
《孙子算经》里面的"物不知数"说的是这样的一个题目:一堆东西不知道具体数目,3个一数剩2个,5个一数剩3个,7个一数剩2个,问一共有多少个。书里面给了计算过程及答案:70*2 + 21*3 + 15*2 -105*2 = 23。它的计算思路如下:70是能被5或7整除的数字,但是除以3正好余1。21是能被3或7整除的数字,但是除以5正好余1。15是能被3或5整除的数字,但是除以7原创 2012-07-10 16:16:26 · 17177 阅读 · 4 评论 -
算法(4)数据结构:堆
#1.0 问题描述实现数据结构:堆。#2.0 问题分析堆一般使用数组来表示,其中某个节点下标i的两个子节点的下标为 2i+1 和 2i+2。堆是一棵完全二叉树。堆有3种基本操作:创建,插入,删除。这3种操作都需要通过“调整堆”的方式来实现。调整堆是指,对堆中的某个节点,若它的值和它所有子节点相比,不是最大/最小,那么就需要将最大/最小的元素和当前节点交换,这种操作成为“调整堆”。创建...原创 2019-04-08 17:18:15 · 157 阅读 · 0 评论 -
算法(3)简单四则运算
#1.0 问题描述实现10以内四则运算(只包含数字,±*/和小括号)#2.0 问题分析四则运算使用“后缀表达式”算法来计算,后缀表达式可以无需考虑运算符优先级,直接从左至右依次计算。问题分解成2部分,一是将“中缀表达式”(我们正常写的四则运算字符串样式,即我们的输入表达式)转为“后缀表达式”;二是使用“后缀表达式”求值。“中缀表达式”转“后缀表达式”流程:首先建立一个栈和一个队列,...原创 2019-04-08 17:17:46 · 2182 阅读 · 0 评论 -
算法(2)KMP算法
#1.0 问题描述实现KMP算法查找字符串。#2.0 问题分析“KMP算法”是对字符串查找“简单算法”的优化。字符串查找“简单算法”是源字符串每个字符分别使用匹配串进行匹配,一旦失配,模式串下标归0,源字符串下标加1。可以很容易计算字符串查找“简单算法”的时间复杂度为O(m*n),其中n表示源字符串长度,m表示匹配串长度。KMP算法的匹配方式同简单算法的匹配方式相同,只不过在失配的时...原创 2019-04-08 17:17:11 · 144 阅读 · 0 评论 -
算法(1)斐波那契数列
#1.0 问题描述实现斐波那契数列,求第N项的值#2.0 问题分析斐波那契数列最简单的方法是使用递归,递归和查表法同时使用,可以降低复杂度。根据数列特点,同时进行计算的数值其实只有3个,所以可以使用3个变量循环递进计算结果。3个变量可以简化为2个变量。#3.0 代码实现3.1使用swift实现func fbnq(_ n: Int) -> UInt64{ if n ...原创 2019-04-08 17:16:40 · 160 阅读 · 0 评论 -
二叉树广度优先遍历
。。。#include using namespace std;struct Node{//二叉树节点 int value; Node *left; Node *right;};struct queue{//辅助队列 int head; int tail; int len;//队列长度,遍历时用 Node ** list;//原创 2013-03-11 15:19:10 · 1172 阅读 · 0 评论 -
基本数据结构(图: 基本结构,DFS,prim算法, kruskal算法)
。。。#include using namespace std;//我们这个图的数据结构 认为://1. 图是由很多节点(VERTEX)构成的, 因此图结构是由一个VERTEX的链表构成的, 每个VERTEX则需要有一个id,也就是start, 取start是为了跟LINE更直观地结合。//2. 每个节点关联着很多(LINE)构成,因此每个VERTEX由很多LINE构成, LI原创 2013-03-13 13:16:02 · 1475 阅读 · 0 评论 -
POJ 1001(高精度乘法 java的2种解法)
使用java提供的BigDecimal类,解这个题真是太容易了,就像写helloworld一样简单。java的的库函数真是比c和c++好用1w多倍。不愧为简单易用的语言。代码:import java.math.BigDecimal;import java.util.Scanner;public class Main { public static void main(String原创 2012-07-16 17:42:38 · 1583 阅读 · 0 评论 -
java排序算法(冒泡,插入,选择,快速,堆,归并,希尔,基数)
import java.util.Arrays;import java.util.LinkedList;/** * * * 各种排序: 冒泡,插入,选择,快速,堆,归并,希尔,基数 */public class Sorts { //1. 冒泡: //时间复杂度:n(n-1)/2=O(n^2) //1. 第一次把最大的放后面 //2. 把最大的放后面。。。 //3.原创 2012-08-06 20:39:06 · 767 阅读 · 0 评论 -
图的最短路径dijkstra算法
想法是这样的:1. 最开始要建立4个list,分别存储 a. 所有的Vertex: allVertex[] b. 一个空的Vertex list: emptyVertex[] c. 一个前缀表 previous list(用来回溯路径用): previous[] d. 一个表示最短距离的表(就是表示某个点与0点的最短距离):前两个list是用来辅助操原创 2013-03-20 16:08:02 · 838 阅读 · 0 评论 -
顺序查找:二分查找,斐波那契查找,插值查找
#include #include #include using namespace std;void printerr(){ cout<<"fc"<<endl;}int binary_search(int *arr, int start, int end, int ele){ while(end >= start){ int mi原创 2012-12-14 17:25:26 · 909 阅读 · 0 评论 -
构造次优查找树
似乎有些错误,但是错在哪了呢?#include #include using namespace std;const int NUM = 9;int value[NUM] = {1,2,3,4,5,6,7,8,9};float weight[NUM] = {1,1,2,5,3,4,4,3,5};float sum_weight[NUM];void init_sum_wei原创 2012-12-27 18:07:35 · 1228 阅读 · 0 评论 -
整型数组负数放左面,其他放右面,要求时空复杂度:O(n), O(1)。
例如:处理前:{5 -3 6 -7 -6 1 8 -4 0 0},处理后:{-3 -7 -6 -4 5 6 1 8 0 0}.#include #include using namespace std;const int LEN = 10;void printInt(int c){ cout<<c<<" ";}void printArr(int *res){原创 2012-11-12 11:45:34 · 1058 阅读 · 0 评论 -
计算整型数的二进制中包含多少个1
方法很多啊,比如://1.靠循环:int calculate(unsigned int n){ int count = 0; unsigned int mark = 0x1; for(int i = 0; i < 32; i++){ if(n&mark){ count++; mark<<1;转载 2012-11-13 18:36:02 · 864 阅读 · 0 评论 -
求整型数组所有子串的和中的最大值
#include using namespace std;const int MIN_INT = -2147483647;int maxSum(const int *arr, int len){ int my_max = MIN_INT; int tmp = 0; for(int i = 0; i < len; i++){//从头到尾。。 tmp原创 2012-11-06 16:25:03 · 919 阅读 · 0 评论 -
KMP算法求回溯数组的步骤
KMP算法到底是什么原理就不说了,各种资料上讲的明明白白,下面我就如何用代码来实现做一下说明和记录.KMP的核心思想就是,主串不回溯,只模式串回溯。而模式串匹配到第几位时失配,要回溯多少,由模式串本身来决定。而求回溯数组主要思想是:>模式串同时看做新的主串与模式串,自己匹配自己。>每次匹配都能产生一个数组值,而这个数组值,就是模式串当前偏移量。>如果模式串失配位置不是首位,那么原创 2012-07-11 14:13:46 · 1276 阅读 · 0 评论 -
算法(5)哈希表
1.0 问题描述实现数据结构:哈希表。2.0 问题分析哈希表可以看作我们经常使用的字典(swift)或对象(js),可以让一个key&value对一一对应,可以快速根据key找到value。哈希表内部使用数组实现,我们需要将不论任何类型的key计算出与之一一对应的数字来,数字的大小介于0到数组尺寸之间,这样,我们可以把value直接存储到数组的对应位置。通过key计算出唯一数字...原创 2019-04-25 23:28:57 · 228 阅读 · 0 评论