算法
文章平均质量分 76
编程芝士
字节跳动后端工程师,测控专业转程序员,努力努力,为了家人和蝈蝈!
展开
-
常用限流算法指南
限流是一种防止系统被过度请求压垮的算法。简单来说,限流就是对系统中的请求进行数量控制,确保系统可以正常处理每个请求而不会因为流量过大而宕机。原创 2023-04-01 15:47:48 · 17100 阅读 · 3 评论 -
【算法学习】算法的时间复杂度与空间复杂度
时间复杂度1.时间频度一个算法执行所耗费的时间,从理论上来说是不能计算出来的,必须通过上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。2.时间复杂度...原创 2019-10-24 22:38:59 · 291 阅读 · 0 评论 -
【算法学习】 选择排序算法
原理选择排序算法是一种比较简单容易理解的排序算法,其原理如下:首先找到n个元素的数组当中最小的那个元素,其次,将它和数组中的第一个元素进行位置交换。再次,从剩下的n-1个元素当中找到最小的元素,将它与数组的第二个元素交换位置,以此类推,直到将整个数组进行排序。实现public class Selection{ public static void main(Strin...原创 2019-08-18 14:59:41 · 231 阅读 · 0 评论 -
【算法学习】 赫夫曼编码
赫夫曼编码原理假设两台计算机之间需要传输一串字符串:i like like likejava do you like a java1.统计个字符出现的次数:d:1y:1 u:1 j:2 v:2 o:2 l:4 k:4 e:4 i:5 a:5空格:92.按照上面字符出现的次数创建一个赫夫曼树,次数作为权值:3. 然后根据赫夫曼树,给各个字符规定编码,向左的路径为0,向右的编...原创 2019-08-28 11:19:17 · 447 阅读 · 0 评论 -
【数据结构】 平衡二叉数(AVL树)
案例给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在.问题分析:左子树全部为空,从形式上看,更像一个单链表. 插入速度没有影响 查询速度明显降低(因为需要依次比较), 不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢 1)解决方案:平衡二叉树(AVL) 定义平衡二叉树也叫平衡二叉搜索树(Self-bala...原创 2019-08-30 23:02:41 · 299 阅读 · 0 评论 -
【算法】 动态规划算法
问题背包问题:有一个背包,容量为4磅 , 现有如下物品: 物品 重量 价格 吉他(G) 1 1500 音响(S) 4 3000 电脑(L) 3 200...原创 2019-09-06 08:54:12 · 285 阅读 · 0 评论 -
【算法】 字符串匹配问题 --- KMP算法
问题描述假如有两个字符串,判断一个字符串是否包含在另一个字符串里面。例如字符串str1的内容为CEABCDDEABCDEF另一个字符串str2的内容为ABCDE字符串2包含在字符串1里面,那么就返回true,否则返回false。暴力匹配暴力匹配的思路比较简单,好理解一点:假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:1)如果当前字符匹配成功...原创 2019-09-07 10:35:06 · 438 阅读 · 0 评论 -
【算法】 最小生成树---Prim算法
最小生成树假设你是移动公司的电气施工的工程师,目前需要为一个镇的7个村庄铺设网络线路做设计,村子之间的位置以及直线距离已经在图上画 出,其中ABCDEFG分别代表那7个村庄,领导要求你必须用最小的成本完成线路铺设,使线路可以到达所有的村庄。这种架线问题的本质就是最小生成树问题,最小生成树(Minimum Cost Spanning Tree),简称MST。定义:1)给定一个带...原创 2019-09-09 22:02:00 · 788 阅读 · 3 评论 -
【算法】 AOV网与AOE网
AOV网我们把施工过程、生产流程、软件开发、教学安排等都当成一个项目工程来对待,所有的工程都可以分为若干个“活动”的子工程。有很多场景对顺序有严格的要求,比如说建造一栋大楼必须先找好施工人员,购买各种材料和准备好各种器械之后才能开始盖楼。或者是拍电影必须先找好演员和各种负责人之后才能开拍。类似这样的场景我们称为AOV网。在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系...原创 2019-09-11 09:19:07 · 6228 阅读 · 0 评论 -
【算法学习】 常见排序算法总结(java)
【算法学习】冒泡法排序【算法学习】 选择排序算法【算法学习】 插入排序算法【算法学习】 希尔排序算法【算法学习】 快速排序算法【算法学习】 归并排序算法【算法学习】 基数排序算法【算法学习】 堆排序算法稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操...原创 2019-08-22 10:36:30 · 860 阅读 · 0 评论 -
【算法学习】 希尔排序算法
插入排序算法存在的问题直接插入排序在在本身数量比较少的时候情况下效率很高,对于大规模乱序数组,其效率不是很理想,因为它只会交换相邻的元素,因此元素智能一点一点的移动到目标位置。例如,如果最小的元素恰好在数组的另一端,那么就需要N-1次移动才能将它移动到争取的位置。希尔排序是插入排序的一种更高效率的实现,对插入排序进行了改进。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序基...原创 2019-08-22 10:15:29 · 249 阅读 · 0 评论 -
【算法学习】 堆排序算法
完全二叉树:在一个满二叉树中,在最下层从最右侧起,去掉相邻的若干叶子结点,得到的二叉树称为完全二叉树。堆其实就是一棵完全二叉树。大顶堆堆顶元素(即第一个元素)为最大项,并且二叉树的父结点都大于子结点。小顶堆堆顶元素为最小项,并且二叉树的父结点都小于子结点。堆排序堆排序就是利用堆进行排序的算法,它的基本思想是,将待排序的序列构成一个大顶堆。此时整个序列的最大值就是堆顶...原创 2019-08-21 23:05:12 · 265 阅读 · 0 评论 -
列主元Gauss消去法(C++实现)
列主元Gauss消去法(C++)目的:编写解n阶线性方程组AX=b的列主元三角分解法的通用程序;原理:列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响,其基本思想是:在进行第 k(k=1,2,...,n-1)步消元时,从第k列的 akk及其以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素akk的位置上,再进行消元。列主元消...原创 2018-11-18 21:38:55 · 15132 阅读 · 4 评论 -
分水岭算法---Kinect V2开发学习(3)
#include <iostream>#include <Windows.h>#include <opencv.hpp>#include <Kinect.h>#include <opencv2/imgproc.hpp>using namespace std;using namespace cv;#include "wate...原创 2019-03-27 20:20:06 · 292 阅读 · 0 评论 -
【算法学习】冒泡法排序
冒泡排序是最常用的排序算法,在本科的时候就学过一次。算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3. 针对...原创 2019-05-22 18:56:57 · 222 阅读 · 0 评论 -
【算法学习】二分法查找
二分法检索(binary search)又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组中,首先将给定值key与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;否则,若key小,则在数组前半部分中继续进行二分法检索;若key大,则在数组后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败...原创 2019-05-22 19:27:58 · 226 阅读 · 3 评论 -
【算法学习】 插入排序算法
插入法排序和我春节回家时间和朋友玩斗地主的时候抓扑克的方式有点像:将每一个元素以插入的方式寻找该元素的适当位置,以达到排序的目的。把n个元素的数组看成一个有序表和无序表,从无序表中拿一个元素到有序表,检查有序表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕。实现public class Insertion{ ...原创 2019-08-18 17:25:36 · 186 阅读 · 0 评论 -
【算法学习】 快速排序算法
快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,实现简单,而且效率高,适合于各种输入数据,它是处理大数据最快的排序算法之一了。快速排序令人瞩目的特点就是它是原地排序(排序过程中不申请多余的存储空间),且将长度为N的数组排序所需要的时间和NlogN成正比...原创 2019-08-19 10:03:03 · 501 阅读 · 0 评论 -
【算法学习】 归并排序算法
基本思想要将一个数组进行排序,可以先把它分成两半分别进行排序,再对这两个数组同样的道理来处理,再对这两个数组同样的道理来处理...直到不能再往下分,然后将结果合并起来,组成一个有序的数组。该算法采用分治的思想,先分后治,且各层分治递归可以同时进行。假设初始序列含有n个元素,则可以看成是n个有序的子序列,每个序列只有一个元素,然后两两归并,...,如此重复下去,知道得到一个长度为n的有序序列...原创 2019-08-20 14:30:51 · 487 阅读 · 0 评论 -
【算法学习】 基数排序算法
基数排序是在桶排序的基础上发展而来的,两种排序都是分配排序的高级实现。将数组中的所有数按位进行分类,由于每一位数的大小都在0~9之间,因此创建下标为0~9的十个数组,根据需要对数进行存储。图解:例如对{12 45 3 15 61 154 242 58 46 9}进行排序的步骤如下:第一轮,建立10个桶,也就是数组,将数组中的数依次取出,按照个位数字的不同依次放入不同的桶中:...原创 2019-08-20 19:28:10 · 339 阅读 · 0 评论 -
牛顿迭代法(C++)
牛顿迭代法(C++) 摘自百度文库题目:给定方程 , 使用牛顿法解方程的根。#include<iostream>#include<string>#include<cmath>using namespace std;double fd(double x){ double c = (x*x*x) / 3 - x; ...原创 2018-11-18 21:18:32 · 22834 阅读 · 2 评论