算法
HuaSir_X
很高兴与大家交流算法、软件工程方面的知识
展开
-
Dijkstra和Prime&Kruskal算法小结
前言讲解这两个经典算法的博文已经汗牛充栋了,这里再记录一下自己学习的心得,欢迎指正。Dijkstra这是一个求某一个端点到其他所有端点的最短距离的算法,有贪心加深搜算法的特点。即在每一层都选现已知距离最短的点,确定下来,然后以此为基础更新未确定距离的点,再进行下一轮搜索。其中贪心的合理性是因为:如果某顶点到src(出发点)的距离是所有未确定的点中最小的,那么就可以将之确定下来了,后面不会出...原创 2018-10-12 15:27:08 · 845 阅读 · 0 评论 -
动态规划初步
基本原理类似于递归解题,把问题丢给上一层来解决,找出状态转换方程即可。当然关键问题是如何定义递归数组与找出状态转换方程。Hello World走楼梯:有n阶楼梯,每次能走一步或两步,请问有多少种走法。设f(n)是n阶楼梯不同的走法。则转移到此状态的方法有两种,从n-1阶楼梯走一步上来,或者从n-2阶楼梯走两步上来。此时求解f(n)的任务只需扔给f(n-1)和f(n-2)即可,再定好初始值:...原创 2018-10-18 20:54:43 · 118 阅读 · 0 评论 -
并查集几道题目
最基础的操作查找某元素的所在的集合,即该元素的根节点。顺便做了路径压缩int pre[MAX];int find(int x){ int r = x; while(r != pre[r]) r = pre[r]; int i = x, j; while (i != pre[i]){ j = pre[i]; pre[i] = r; i = pre[i]; } retu...原创 2018-10-16 09:21:18 · 210 阅读 · 0 评论 -
组合数学基本
基础知识先复习一下高中学的基础知识A(m, n) = n!/(n-m)! 从n个元素中有顺序的取出m个元素。C(m, n) = n!/(n-m)!m! 从n个元素中无顺序的取出m个元素。高考选择题中小技巧有排除法,分类讨论法,插空法等。醒脑小例题有n个人围着桌子吃饭,请问有多少种排列方法?要是其中两个人不想坐在一起呢?解:(1)有n!/n种排列方法,因为圆桌需要指定一个开始坐的起点...原创 2018-10-16 16:20:51 · 215 阅读 · 0 评论 -
母函数初步
定义对于序列a0,a1,a2,…,an构造一函数 G(x) = a0+a1*x+a2*x2+a3*x3+…+an*xn则称G(x)是序列a0,a1,a2,…,an的母函数。在下面的例题中可以看到母函数可以将问题的复杂度从穷举(NN)降为N3。应用例1:若有1克、2克、3克、4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案?考虑构造母函数。如果用x的指数表示称出的重量,则:1个...原创 2018-10-17 15:08:25 · 233 阅读 · 0 评论 -
二叉树C++实现
说明这是个经典问题,其中指针,结构是以后学习的基础,在此记录一下#include <stdio.h>#include <iostream>using namespace std;typedef int TYPE;class BinTree{public: struct Node{ TYPE data; Node *lc...原创 2018-11-06 14:53:29 · 231 阅读 · 0 评论