算法与数据结构
作为一个开发,数据结构与算法是一个程序的骨骼与血液,是一个江湖人的内功,一个好的内功能让我们更好的释放技能,走向架构师
菜鸟腾飞
一个正在努力奋斗的95后程序员 , 记录我学习成长的点滴
展开
-
[数据结构]什么是链表?
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的–百度百科大致分为单链表和双向链表1.单链表:每个节点包含两部分,一部分存放数据变量的data,另一部分是指向下一节点的next指针2.双向链表:除了包含单链表的部分,还增加的pre前一个节点的指针链表的优点在于,不需要连续的存储单元,修改链表的复杂度为O(1) (在不考虑查找时)但是...原创 2019-07-14 22:52:52 · 12727 阅读 · 0 评论 -
[数据结构]什么是数组?
数组:有限个相同类型的变量所组成的一个集合,数组中的每个变量可以成为一个元素,数组在内存中是顺序存储的,需要开辟连续的内存空间.数组的特点:查找快,修改慢, 查找的时间复杂度O(1),而修改是O(n) ,其中当不关心数组的顺序时,删除操作可以用末尾的元素覆盖所要删除位置的元素,然后再删除末尾元素此时复杂度为O(1)手敲一个简单的数组/** * @author : 董硕 * @time: ...原创 2019-07-14 18:52:46 · 2543 阅读 · 0 评论 -
[算法]什么算法?怎么衡量算法的好坏?
一 什么是算法?在计算机领域中,算法是一系列的程序指令,用于处理特定的运算和逻辑问题.衡量算法的好坏主要的指标是时间复杂度和空间复杂度二 怎么衡量算法的优劣?2.1时间复杂度时间复杂度可以理解为,算法执行的基本次数,是对算法运行时间长短的衡量,但仅仅这么认为是不正确的,还需要符合以下规则:如果运行时间是常数级,则用常数O(1)来表示只保留时间函数中的最高阶项如果最高阶项存在,则...原创 2019-07-13 23:44:43 · 5370 阅读 · 0 评论 -
[算法]常见负载均衡算法
一、概要 随着系统日益庞大、逻辑业务越来越复杂,系统架构由原来的单一系统到垂直系统,发展到现在的分布式系统。分布式系统中,可以做到公共业务模块的高可用,高容错性,高扩展性,然而,当系统越来越复杂时,需要考虑的东西自然也越来越多,要求也越来越高,比如服务路由、负载均衡等。此文将针对负载均衡算法进行讲解,不涉及具体的实现。二、负载均衡算法 &n...转载 2019-01-02 15:01:13 · 198 阅读 · 0 评论 -
[算法]链表+HashMap实现LRU算法
/** * @author :dongshuo * @date : 2018/12/10 14:27 * @desc : 链表+hashmap实现的 */public class LRUCache1<K,V> { private final int MAX_CACHE_SIZE;//最大的缓存大小 private Entry first; //头元素 ...原创 2018-12-10 15:13:50 · 1400 阅读 · 0 评论 -
[算法]快速排序
利用递归,选择参照值将比参照值小的放左面,比参照值大的放右面public static void quick(int start,int end) { //define init value int i,j,t,temp; i = start; j = end; //data check if (nu...原创 2018-09-21 22:12:29 · 144 阅读 · 0 评论 -
[算法]希尔算法
希尔算法是插入排序与冒泡的一种延伸,将以步长为2将数组拆分grap= length/2查分成一小块进行排序然后继续grap/2继续上述排序使数组大致上有序直到grap=1时完成排序,减少排序次数,降低复杂度 for (int gap = array.length / 2; gap > 0; gap /= 2) { //从第gap个元素,逐个对其所在组进行直接...原创 2018-09-21 21:15:52 · 562 阅读 · 0 评论 -
[算法]冒泡+选择+插入排序+java
package com.dongshuo.test.arithmetic;/** * @author dongshuo * @data 2018/7/20 17:05 * @Description */public class XuanZeMaopao { private static int[] array = {12,53,1,43,6,8,2,9,12,6,32}; ...原创 2018-07-24 18:49:19 · 110 阅读 · 0 评论 -
程序员必会十大算法及讲解
本文盘点程序员必须知道的十大基础实用算法及其讲解。算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn) 次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很转载 2017-11-22 09:03:36 · 2208 阅读 · 0 评论 -
回朔算法(试探算法)-彩票号码组合
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法原创 2017-09-10 19:41:56 · 5299 阅读 · 1 评论 -
贪婪算法之找零钱
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关 过程 建立数学模型来描述问题; 把求解的问题分成若干个子问题; 对每一子问题求解,得到原创 2017-09-10 17:15:07 · 1649 阅读 · 0 评论 -
分治算法之循环赛程日志表
什么是分治算法?就是当求解的数据过多,计算的过程过于复杂的情况即可使用分治算法分治算法的一般步骤:1.分解:将复杂问题划分为若干同类小问题2.求解:当子问题足够小时,用简单的方法解决3.合并:按照求解的要求,将子问题合并,即作为最终的结果 问题描述: 设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:转载 2017-09-10 15:01:42 · 2865 阅读 · 0 评论 -
递归算法简单介绍
什么是递归算法?递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数) 递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身。 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效原创 2017-09-10 13:15:49 · 865 阅读 · 0 评论