算法 - 技术教程文章

XXTEA 加密算法 C++ C#兼容版本号【图】

1.一个不错的可逆加密算法XXTEA之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源。所以花了点时间来看了下XXTEA。一般有两种加密算法:1.像md5,SHA1,等hash算法,是不可逆的。一般数据库存的username和password就用这个。 2.本文所提到的XXTEA算法,是可逆的,有个key能够加密。安全方面的东西还蛮多的,说到key,还有什么public key, private key,我都还给老师了。忘光了。可逆加...

四种最常见的字符串匹配算法概述【代码】

1 BF算法:BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。def naive_matching(t, p):m, n = len(p), len(t)i, j = 0, 0while i < m and j < n: # i==m means a matchingif p[i] ...

排序算法

总结 稳定 时间复杂度 平均时间复杂度 空间复杂度冒泡排序 √ O(n2) O(n2) O(1)选择排序 × O(n2) O(n2) O(1)插入排序 √ O(n2) O(n2) O(1)二叉排序 √/× O(n2) O(n*log2n) ...

微信红包的算法实现【代码】

1、每个人都要能够领取到红包;2、每个人领取到的红包金额总和=总金额;3、每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味;4、算法一定要简单,不然对不起腾讯这个招牌;header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8个红包,支持8人随机领取 $min=0.01;//每个人最少能收到0.01元for ($i=1;$i<$num;$i++) {$safe_total=($total-($num-$i)*$min)/(...

垃圾回收的算法与实现,pdf

下载地址:网盘下载★ Ruby之父Matz作推荐语:上古传承的魔法,彻底揭开垃圾回收的秘密! ★ 日本天才程序员兼Lisp黑客竹内郁雄审校 本书前半介绍基本GC算法,包括标记-清除GC、引用计数、复制算法的GC、串行GC的算法、并发GC的算法等。后半介绍V8、Rubinius、Dalvik、CPython等几种具体GC的实现。本书适合各领域程序员阅读。 下载地址:网盘下载原文:https://www.cnblogs.com/cf1774575641/p/9348751.html

分治算法【代码】【图】

算法思路: 实例: 乒乓球赛程安排: 实现:(1) 分解: 首先把8人赛程安排划分为4人:(2) 求解: 然后再把4人赛程划分为2人:(3) 合并: 合并成4人赛程 1import java.util.Scanner;2 3publicclass FenZhi {4 5privatestatic Scanner in;6 7publicstaticint[][] fenzhi(int[][] a, int k, int n) {8 910//这里假设是从编号1开始处理的11if (n == 2) { 12 a[k][1] = k; 13 a[k][2] = k + 1; 14 a[k + 1...

xxtea---单片机数据加密算法【代码】

转:https://www.cnblogs.com/LittleTiger/p/4384741.html  各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性。常用的加密解密算法比如DES、RSA等,受限于单片机的内存和运算速度,实现起来比较困难,但一种叫TEA的加密算法特别适合单片机使用。  TEA(Tiny Encryption Algorithm)是一种简单高效的加密算法,以加密解密速度快,实现简单著称。...

算法导论学习-binary search tree【代码】【图】

1. 概念:Binary-search tree(BST)是一颗二叉树,每个树上的节点都有<=1个父亲节点,ROOT节点没有父亲节点。同时每个树上的节点都有[0,2]个孩子节点(left child AND right child)。每个节点都包含有各自的KEY值以及相应的satellite data。其中KEY是几种BST基本操作的主要操作对象。 2. BST的特别性质:BST任何一颗子树上的三个节点left, parent, right. 满足条件left.key<parent.key<=right.key一颗典型的BST如下图所示: 观察之...

联接算法【图】

??本文摘自《锋利的SQL》:http://item.jd.com/10380652.html在Microsoft SQLServer Management Studio中执行查询时,如果选定工具栏中的按钮,可以看到为查询生成的执行计划。执行计划以图形方式显示了SQLServer查询优化器选择的数据检索方法,如表扫描、排序、哈希匹配等。对于联接查询,SQL Server会根据联接表之间的数据、索引等情况,选择使用嵌套循环联接、合并联接或哈希联接。7.7.1嵌套循环联接嵌套循环联接也称为“嵌套迭...

《数据结构与算法之美》08——排序(一)冒泡排序、插入排序、选择排序【代码】【图】

一、如何分析一个“排序算法”从三个维度进行评价和分析:1. 排序算法的执行效率a. 最好情况、最坏情况、平均情况时间复杂度b. 时间复杂度的系统、常数、低阶c. 比较次数和交换(或移动)次数 2. 排序算法的内存消耗用空间复杂度来衡量。原地排序算法,特指空间复杂度是O(1)的排序算法。 3. 排序算法的稳定性稳定的排序算法:相同元素的前后顺序没有改变的排序算法反之叫不稳定的排序算法。 二、冒泡排序冒泡排序只会操作相邻的两个...

leecode 算法

找到一个讲解各种算法的大神,放上来一起学习。https://leetcode-cn.com/leetbook/read/learning-algorithms-with-leetcode/xsz9zc/ 原文:https://www.cnblogs.com/xiaohaigegede/p/13945390.html

【数据类型概述与算法】【代码】【图】

数据结构与算法概述数据结构的定义我们如何把现实中大量而且非常复杂的问题以特定的数据类型(个体)和特定的存储结构(个体的关系)保存到相应的主存储器(内存)中,以及在此基础上为实现某个功能而执行的相应操作,这个相应的操作也叫做算法。数据结构 == 个体 + 个体关系算法 == 对存储数据的操作数据结构的特点数据结构是软件中最核心的课程。程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言。算法衡量算法的标准时间复杂...

Java学习之二分查找算法【代码】

好久没写算法了。只记得递归方法。。结果测试下爆栈了。思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的。 自己写的代码: 1package com.gh;2 3import java.util.Arrays;4/** 5 * 二分查找算法实现6 * @author ganhang7 *8*/ 9publicclass Search { 10publicstaticvoid main(String[] args) { 11 search1(0, 10000, 20000)...

《算法图解》第七章笔记【代码】【图】

软件环境:Python 3.7.0b4一、迪杰斯特拉(dijkstras)算法介绍算法目标:找出一个图中最快(耗时最短)的路径。实现步骤:找出最短时间内前往的节点;对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销;重复这个过程,直到对图中的每个节点都重复了以上两个步骤;计算最终路径。 二、迪杰斯特拉算法术语介绍迪杰斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。带权重的图称为加权图(...

KNN-K近邻算法【图】

KNN思想简单数学所需知识少(近零)效果好可解释机器学习算法使用过程中的很多细节问题更完整的刻画机器学习应用的流程K近邻本质:如果两个样本足够相似,那么它们就有可能属于同一类别。e.g. 绿色的点是新加入的点,取其最近的k(3)个点作为小团体来投票,票数高的获胜(蓝比红-3:0),所以绿点应该也是蓝点计算距离:最常见 -> 欧拉距离,求a, b两点的距离(二维,三维,多维): -> 理解小笔记:((a样本第一个维度特征-b样本第...

[算法]String to Integer(atoi)【代码】

Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.Analysis The following cases should be considered for this problem:1. null or empty string 2. white spaces 3. +/- sign 4. calculate real value 5. handle min & max Java Solutionpublicint atoi(String st...

【算法笔记】用指针实现小顶堆【代码】

本文将讨论指针堆与数组堆的区别,和指针堆的具体实现方式。题目:洛谷P3378啊对了,下文不会解释指针是什么、指针的用法、为什么加“&”等基础问题,需要的建议去看《算法竞赛入门经典训练指南》中指针版名次数(treap)的实现,或是向懂的小伙伴提问。一 指针与数组的比较数组版中,由于下标的特殊性质,我们可以快速找到某个节点的父亲节点。所以在数组版中,大多使用的是从叶子往根节点更新的插入/删除方式。同时,数组版的原理是...

求解数独回溯算法【代码】

实现的java代码如下://判断a[i][j]取值val是否有效publicboolean isValid(int[][] a, int i, int j, int val){//判断是否跟同行冲突for(int j1=0;j1<9;j1++){if(a[i][j1]==val)returnfalse;}//判断是否跟同列冲突for(int i1=0;i1<9;i1++){if(a[i1][j]==val)returnfalse;}//找出a[i][j]所在的九宫格int i1 = 0, j1 = 0;boolean flag = true;for(i1=0;i1<3&&flag;i1++){if(!(i>=i1*3&&i<3*(i1+1)))continue;for(j1=0;j1<3;j1++){if(...

Java8大排序算法【代码】【图】

一.冒泡排序  基本思想:通过对待排序序列此前向后,依次比较相邻元素的值,若发现逆序则进行交换,使得较大的值从前面移动到后面,     类似于水下的气泡一样(是所有排序算法中效率最低的) publicstaticvoid BobbleSort(int[] arr){/*冒泡排序,时间复杂度为O(n^2)*/if (arr == null || arr.length == 0){return;}int temp = 0; // 临时变量,用...

Java排序需掌握算法 详解【代码】

package com.sxt.review;/*内部排序:(在内存)* 插入排序-->希尔排序* 冒泡排序-->快速排序* 选择排序-->堆排序* 归并排序* 基数排序* 外部排序:(排序过程需访问外存)*/import java.util.Arrays;publicclass TestSort {publicstaticvoid main(String[] args) {int[] arr = { 2, 45, 3, 0, 7, 9, 2, 88 };// BubbleSort(arr);// System.out.println("冒泡排序:"+Arrays.toString(arr));// ChoiceSort(arr);// System.out.prin...

数据结构与算法复习第一天——基础概念,线性表

数据结构的一些基本术语:数据:客观事物的符号表示数据元素:数据集合中的一个个体数据项 组成数据元素数据对象是数据的子集 由相同性质的数据元素构成数据结构:带有结构的数据元素的集合数据结构可以用一个四元组表示(D,L,S,O)data ,logical structrue ,storage struction operation操作L——集合,线性,树形,图形S——存储结构,有顺序,链式,散列线性表——线性结构,数据元素之间一对一的关系,N个具有相同类型的数据元素...

算法训练:出现次数最多的整数【代码】

问题描述编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。输入格式:第一行是一个整数N,N? £? 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。输出格式:输出只有一行,即出现次数最多的那...

各大算法专题-STL篇【代码】

这篇文章着重记录c++中STL的用法。主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理。 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排序,默认的这种形式由小到大的排序.其属于<algorithm>这个头文件中,它可以给任何对象进行排序,但是需要写自定义函数cmp.完整形式为sort(a,a+n,cmp).low_bound(a , a+n ,x)-a得到数组a[]从a[0]往后n个长度中,第一个大于或者等于x的下标index.这里...

算法学习(一)五个常用算法概念了解

网传常用五大算法:贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法 贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。[1] 动态规...

一些简单小算法【代码】

快速排序#include<iostream> using namespace std; void quickSort(int a[],int,int); int main() {int array[]={34,65,12,43,67,5,78,10,3,70},k;int len=sizeof(array)/sizeof(int);cout<<"The orginal arrayare:"<<endl;for(k=0;k<len;k++)cout<<array[k]<<",";cout<<endl;quickSort(array,0,len-1);cout<<"The sorted arrayare:"<<endl;for(k=0;k<len;k++)cout<<array[k]<<",";cout<<endl;system("pause");return 0; }void qui...

数值算法:无约束优化之多维优化之共轭方向法

在效率上,共轭方向法位于最速下降法和牛顿法之间。它具有特性:对于n维二次型问题,能够在n步之内得到结果;共轭梯度法不需要计算海森矩阵;不需要求逆;共轭方向:Q为n阶实对称矩阵,对于方向 d(0), d(1),... , d(m), 如果对于所有的 i 不等于 j ,有 d(i)TQd(j)=0, 则称它们是关于Q共轭的。定理:如果Q是n阶正定矩阵(自然是对称的),如果方向d(0), d(1),... , d(k),k<=n-1非零,且是关于Q共轭的,那么它们线性无关;构造n阶...

贪心算法【代码】【图】

Wiki关于算法的定义贪心算法(英语:greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。[1]比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最...

排序算法的例题【代码】【图】

车厢重组门儿冒泡排序,每次交换即为调转车厢,ans++#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n; int a[10000]; int ans; int main(){cin >> n;for(int i = 1;i <= n; i++) cin >> a[i];for(int i = 1;i <= n; i++){for(int j = 1;j <= n - i; j++){if(a[j] > a[j+1]){swap(a[j],a[j+1]);ans++;}}} cout << ans << endl;return 0; }求逆序对传送归并排序。合并的时候,被放进去的数字右...

[转] 字符串匹配的KMP算法【图】

字符串匹配是计算机的基本任务之一。  举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?  许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。  这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,...

【LeetCode-面试算法经典-Java实现】【034-Search for a Range(搜索一个范围)】【代码】【图】

【034-Search for a Range(搜索一个范围)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a sorted array of integers, find the starting and ending position of a given target value. Your algorithm’s runtime complexity must be in the order of O(log n). If the target is not found in the array, return [-1, -1]. For example, Given [5, 7, 7, 8, 8, 10] and target value 8, return [3, ...