GithubHelp home page GithubHelp logo

jaydenwen123 / algorithm Goto Github PK

View Code? Open in Web Editor NEW

This project forked from qieguo2016/algorithm

0.0 2.0 0.0 403 KB

常用算法和数据结构讲解,面试算法题/leetcode解题,提供golang/js版本

HTML 6.24% JavaScript 28.74% Go 65.02%

algorithm's Introduction

算法与数据结构

用通俗易懂的语言来介绍工作和面试中常见的数据结构和算法,提供golang和js两种语言的实现。另外提供面试中常见算法题,尤其是leetcode题目的讲解和golang代码实现。

数据结构部分

增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。

这里采用redis底层类似的实现,增加了

  1. B+树的简单实现(未考虑并发)
    B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,也可能是一个包含两个或两个以上孩子节点的节点。 B+ 树通常用于数据库和操作系统的文件系统中。 NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系统都在使用B+树作为元数据索引。 B+ 树元素自底向上插入,其特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。
  2. 字典树的构建

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最久未使用的页面予以淘汰。
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

堆是一种带有顺序结构的完全二叉树,分为大根堆和小根堆,根据完全二叉和父子大小关系,利用数组结构比较容易实现堆结果。另外golang本身的堆实现(container/heap.go)则使用了sort接口,更加灵活。

golang实现的单链表和双链表结构

介绍了基本数据结构之线性表的特点和原理以及js的算法实现。 由于js语言本身的特点,线性表在js中主要以数组的应用为主,而js数组本身也并不是传统意义上的连续线性表。

js对象大家都用的很多,但其底层的哈希表特性你是否清楚? 在这篇文章里,小茄会用最平白易懂的语言来讲哈希结构的原理、构造方法,当然,还有哈希表在js中的应用。

树是一种带有层次的数据结构,分层特性可以用于实现数据存储和快速查找。 比较常见的应用场景就是各种目录结构,如文件目录、DOM结构等,由于每指定一层就是一层筛选,所以可以用于快速查找。 js中可以通过对象的哈希结构来实现树结构,两种数据结构结合,速度更快。

算法部分

做任何算法的时候,都要先弄清需求!如果是需要构造一个函数,那一定要弄清楚函数的调用方式、各参数的含义,多举几个例子说明。只有弄懂了这个函数应该是怎样的,才有可能写出符合要求的函数

Array array.js

  • indexOfArray:数组子串位置查询

  • arrayFilter:数组筛选

  • arrayUnique: 数组去重

  • combineArray: 数组归并排序

  • longestSubArray: 数组最长无重复子串查找

  • longestSubArrayHash: 利用哈希表去重的数组最长无重复子串查找

sort sort.js

recursiverecursive.js

other

leetcode

LeetCode的golang解题:leetcode

algorithm's People

Contributors

qieguo2016 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.