
算法
前行中632
不想被淘汰的码农
展开
-
稀疏矩阵快速转秩
/* 稀疏矩阵的转秩*/#include<iostream>using namespace std;//矩阵的行数,列数,非零元素的个数int matrix_r;int matrix_c;int matrix_num;int matrix[1000][3]={{0,3,22},{0,6,15},{1,1,11},{1,5,17},{2,3,-6},{3,5,39},{4,0,91}原创 2017-05-24 21:29:21 · 503 阅读 · 0 评论 -
线索树(数据结构)
线索树(Threaded Tree) 个人理解: 对于一棵二叉树中,它的一些节点的左右孩子不一定都在,这样的话,我们基于原先的节点结构template<Type>class Node{ Type data; Node* leftChild; Node* rightChild;}(1)这样就会有空间上的浪费,于是我们就想着将这些点利用起来 (2)考虑到原创 2017-06-23 19:28:15 · 1938 阅读 · 0 评论 -
二分查找树(Binary Search Tree)
对于查找这个操作,相信大家都不陌生顺序查找 ( Sequential Searching )最直接的查找便是顺序查找 ( Sequential Searching ),其实就是从头到尾遍历一遍,看有无自己想要的元素,充满暴力,所以同时也意味着效率低下,时间复杂度O(n) ,所以要改进二分查找 ( Binary Searching )先决条件,要求序列有序这是一个二分查找的实现代码: int Bin原创 2017-06-23 20:28:45 · 2344 阅读 · 0 评论 -
floyd ,dijikstra,Bellman-ford算法详解
几乎是瞬间,自己已经是大二了,真得时间过得好快,大一掠过,只有一些美好的回忆留在心头。不扯淡了,言归正传。图论,这名字起的太大了,其实就是一些最基本的算法,用于解决图上的最短距离的算法。第一个是floyd 算法 很简单直白的算法,是使用邻接矩阵来求最短路的算法,其实就是通过点来松弛两点之间的距离。 例如:for(int i=1;i<=n;i++){ for(int j=1;j<=n;原创 2016-09-19 21:49:54 · 2261 阅读 · 0 评论 -
C++写二叉树
在代码中都是使用的是递归来遍历二叉树,在这里面的代码中主要测试的是二叉树的插入和遍历insert()和preOrder(),inOrder(),postOrder();#include<iostream>using namespace std;template <class Type> class BinaryTree;template <class Type> class BinTreeNo原创 2017-06-15 19:13:58 · 338 阅读 · 0 评论 -
浅谈md5加密
md5加密是我们生活中十分常见的加密算法。我是最近在写一个H5 的项目时接触到的这个算法,这个算法极大的引起了我的好奇心,是登陆界面,要求是将用户输入的密码使用md5加密之后,再传回服务器,当时我十分不理解原因是什么.废话少说 原因密码在前端进行加密,然后服务器使用摘要进行比对,这样在整个密码的校验过程中是在服务器端不知道明码的情况下进行的,极大的保证了密码的安全在避免文件内容被篡改原创 2017-06-04 17:04:15 · 21934 阅读 · 4 评论 -
Apriori算法,关联分析
Apriori用于寻找频繁项集,挖掘一般规则Apriori就是先验,通过此原理,可以帮我们减少可能感兴趣的项集,即如果一个项集是频繁的那么他的自己也是频繁的,而一个项集是非频繁的,那么他的子集也是非频繁的,这原理可以很好帮我们缩小范围 思路以及整体代码实现:生成测试数据#最初的订购清单def loadData(): return [[1, 3, 4], [2,3,5], [1, 2原创 2017-12-12 11:57:45 · 457 阅读 · 0 评论 -
通过位运算求一个集合的子集
整体的思路: 首先要清楚位运算的意义:1<for(int i=0;i<(1<<n);i++){ print_subset(n,i,num);}void print_subset(int n,int s,double[] num){ for(int i=0;i<n;i++){ if((s&(1<<i))!=0){原创 2017-12-13 20:35:23 · 810 阅读 · 1 评论 -
最大子序列(java)
考虑有可能输入全为负数的情况import java.util.Scanner;/***@author 风雨落*@version 2017年12月17日下午8:33:41*@title*/public class subList { public static void main(String[] args) { // TODO Auto-generated meth原创 2017-12-18 15:14:01 · 296 阅读 · 0 评论 -
剑指offer关于链表的一些操作(java)
import algorithd.LinkList.Node;/***@author 风雨落*@version 2017年12月16日下午6:21:29*@title java写链表尝试*/class LinkList { Node head; //添加数据 public void add(int data){ Node newNode = new No原创 2017-12-18 20:23:09 · 201 阅读 · 0 评论 -
接收一个10字节数据,判断其中有多少位是0
C语言版本:#include<stdio.h>typedef unsigned char byte;int count_bits(byte data){ int count = 0; for(int i=0;i<8;i++){ if((data&(1<<i))==0){ count++;原创 2017-12-19 10:14:58 · 1691 阅读 · 0 评论 -
快排再次理解
快排可以与冒泡排序作比较,冒泡排序是为了将每一个元素放到他的对应位置上,做了许多次无用的比较和置换,而快速排序正是解决这个问题,在快速排序的过程中,我们会先挑一个元素作为基准元素,我们要将它放到合适的位置,并尽可能减少多余的比较与置换 在快排中不存在置换,在算法中巧妙地设计,将置换变成了赋值public static void mquicksort(int[] num,int start,i...原创 2018-02-22 18:14:07 · 224 阅读 · 0 评论 -
筛选法求素数
本文转自于:http://dalu.blogbus.com/logs/37977984.html由于一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。例如要查找100以内的质数,首先2是质数,把2的倍数去掉;此时3没有被去掉,可认为是质数,所以把3的倍数去掉;再到5,再到7,7之后呢,因为8,9,10刚才都被去掉了,而100以内的任意合转载 2018-02-24 10:56:09 · 218 阅读 · 0 评论 -
优先队列(转载)
优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~ 百度百科上这样描述的: 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素 优先队列的类定义 优先队列是0个或多个元素的集合,每个元素都有一个优先权或值转载 2017-06-11 16:31:30 · 209 阅读 · 0 评论 -
C++中栈与堆的区别
转载至http://www.cnblogs.com/hahawgp/archive/2013/04/08/3008737.html堆中和栈中申请的空间的比较, 我找到了下面的比较:栈的情况: 栈上分配空间的好处是快,而且对象生存期是自动的,离开当前域之后就自动析构回收。 坏处就是栈空间有限,而且不能人为控制对象的生存期, 比如你无法将一个函数内部的栈上的对象返回,因为这个函数执行完毕后栈空间会转载 2017-06-11 16:24:14 · 475 阅读 · 0 评论 -
C++非递归的前中后序遍历实现
current 指针是root指针,即开始遍历的点 被注释掉的部分是递归的实现,在这三种遍历中,前序和中序遍历的套路相同,在后序遍历是,新增了一个struct来保存每个点被弹出过的次数是否到达了3次,以此来决定是否可以输出,template <class Type> void BinaryTree<Type>::preOrder( BinTreeNode <Type> *current)原创 2017-06-16 16:26:14 · 634 阅读 · 0 评论 -
快排二
快排的有一种写法: 1、基准点点产生经过一点小优化,快排的算法复杂度一般是O(nlogn),最坏和冒泡排序相同O(n^2),为了避免这种情况,即基准点的选择总是全序列的最小值,所以就有了代码中的finpivotops()方法,寻找数组中第一个、最后一个和中间的一个中的中间值作为基准 2、核心代码是QuickSort()方法 3、另一个我感觉理解起来会更好的写法: http://blog.cs原创 2017-06-16 21:12:25 · 276 阅读 · 0 评论 -
排序闲谈
最近在看邓俊辉老师的数据结构课程,不得不说老师讲的很透彻,有些收获,希望写博客来整理一下。 排序的算法有很多,例如:冒泡排序,选择排序,插入排序,以及刚刚听说的归并排序,好像还有快速排序(听说很牛) 冒泡排序的特性在此前写过,这里写一下选择排序和插入排序。 选择排序: 以前写的码是这样的:void selectionsort(int *num,int n){原创 2016-08-17 20:38:02 · 374 阅读 · 0 评论 -
元素查找
一开始的想法就是通过find();来实现,充满暴力的方法,直接挨个遍历,相互比照循州对应元素。 之后又学习了二分查找,是针对向量的一种查找方式,更为简洁,效率。 版本A:int binsearch(int *num,int n,int c){ int low=0,hi=n; int mi; while(low<hi) { mi = (low+hi原创 2016-08-18 10:55:57 · 388 阅读 · 0 评论 -
数据结构栈实现四则运算
例如,计算9+(3-1)*3+8/2思路:通过栈来实现上述元素,我们一般称上述表达式为中缀表达式,我们首先要将其转换为后缀表达式,因为中缀表达式不利于计算机运算。上代码: 算法思路: 对字符串中的内容,遇到数字就输出,遇到符号则与栈顶元素比较优先级,若低,则将栈顶元素弹栈,若高,则压栈。若为右括号,则连续输出,直到遇到左括号,这输出的就是后缀表达式 其中isp()和icp()这两个函数是对于原创 2017-06-07 16:03:08 · 3885 阅读 · 1 评论 -
数据结构C++栈
自己实现栈结构#include<iostream>#include<assert.h>using namespace std;template<class T> class Stack;template<class T> class StackNode{ friend class Stack<T>;private: T data; StackNode原创 2017-06-07 16:07:16 · 212 阅读 · 0 评论 -
树状数组
今天听学长讲了树状数组,不得不说一脸懵逼,哈哈。回来后写了两个入门题,但依然被坑得挺惨,数据范围的问题,2333,狂爆int, 下次看题时,一定要注意数据范围的问题,int大概可以开到10^9吧,要珍重,另外学了一个数据的离散化,即对于值特别大,而n(个数)很小的情况,可以用下标来代替值,因为在一个数组时,它的大小开到10^8. 9次方的话就会爆掉了,编译都通不过 树状数组的原创 2016-08-29 20:46:20 · 343 阅读 · 0 评论 -
快速排序(quicksort)
快排一种非常常用的算法,采用分治思想,不需要辅助空间。 思路: 1. 随意找一个元素,一般选择首元素,以其为基准。 2. 从序列两头遍历这个序列,将比基准小的元素排在左侧,大的排右侧。 3. 对基准左侧和右侧的两个子序列,重复前两步,直到将序列分割成一个元素。代码:“` void quicksort(int *num,int low,int hi原创 2016-08-18 19:39:35 · 428 阅读 · 0 评论 -
归并排序(mergesort)
归并排序(mergesort) 它在时间复杂度上由于我们较常用的冒泡或者查找等算法,它实现了在最坏情况下O(nlogn)C语言实现:#include<stdio.h>int num[100];void merge(int low,int mid,int hi){ int temp[100]; int i,j,k; i=k=low; j=mid;原创 2016-08-16 10:21:51 · 314 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
经历了大学一年,再回首重新审视冒泡排序,可以看的更透彻,更明朗一些。 冒泡排序(Bubble Sort) 其实整个中心思想在于,一个有序的排列中,一定不会存在逆序对,所以它一遍遍的遍历,让各个位置保证数字就位。版本A版本B:原创 2016-08-16 08:34:05 · 446 阅读 · 0 评论 -
汉诺塔问题
很早时就学了汉诺塔,当时觉得好深奥啊,感觉好难懂啊,(好羞愧啊)现在再来想一下,重新来过,感觉思路一切都是那般清晰 n-圆盘数 a-源塔座 b-中介塔座 c-目标塔座它是通过递归来解决的这问题, 伪代码: 当n=1时 直接就a->c 当n>1时 hanoi(n-1,a,c,b);//将最下面一块之上的园盘都通过c,从a挪到b上去 a->c;//然后将最后一块挪到c原创 2017-06-08 16:33:29 · 323 阅读 · 0 评论 -
树(数据结构)
一、层次遍历 如图: 通过它的遍历顺序,可以选出队列来作为辅助的存储空间最为合适 大体思路:Queue < const BinTreeNode <Type> * > q;template <class Type>void LevelOrder<Type> :: advance ( ) { if ( q.IsEmpty ( ) ) { if ( current ==原创 2017-06-21 16:37:04 · 307 阅读 · 0 评论 -
再来谈排序
排序,这个无解的话题再来总结一下最近看排序的心得我们目前学的排序都是属于内部排序,所谓内部排序,外部排序就是你要排序的序列是否可以在内存中放下,如果序列过长,需要与磁盘相交互,这就是外部排序了,而在内存内的话,就是我们熟知的一些算法了,对于外部的具体实现我并不了解,就不做发言了。 我们在这里谈一下内部排序 分类: 1. 插入排序 总体思想:对于一个无序序列,我们都确原创 2017-07-01 20:32:46 · 215 阅读 · 0 评论 -
全排列题解
文章目录题目描述解决方案:递归:字典序算法:参考文章:题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。解决方案:递归:import java.util.ArrayList;public class Solution { ArrayList<...原创 2019-03-29 11:34:43 · 447 阅读 · 0 评论