Giter VIP home page Giter VIP logo

iridescent's Introduction

Iridescent

Solid data structure and algorithms in Python

目前进度:数据结构部分已完成,算法部分即将开始完善链表和二叉树相关算法。Star this repo and come back later :)
(2022-06更新:终于更新了算法练习的部分)

Data Structure

数据结构我跟的主要知识体系是浙江大学的MOOC《数据结构》,以及这个GitHub仓库中的数据结构部分

每种数据结构都用Python实现了常用操作,并分析了时间复杂度(其实通过代码也能分析出来),部分复杂的数据结构(红黑树/B树/堆/哈希表...)有我自己学习过程中的一些理解。完整代码在下面的ipynb文件中。

  • 数组
  • 链表
  • 堆栈
  • 队列
    • 循环队列
  • 二叉树
    • 二叉树的遍历
  • 二叉搜索树
  • 平衡查找树
    • AVL 树
    • 红黑树
    • B树、B+树
  • 字典树
  • 并查集
  • 哈希表

(建议在本地查看.ipynb文件,方便运行和页内跳转)

建议自己亲自实现一遍数据结构的所有操作,然后用我写的测试用例运行一下。自己写一遍能够掌握得更牢固。写的时候最好先看原理,理解每种操作怎么实现再自己写,我的代码仅仅作为参考,需要思路的时候再看我的代码,最好不要先看。

Algorithm

算法我跟的主要知识体系是 Robert Sedgewick 的《算法-第四版》,以及Coursera上面配套的Princeton的网课。部分知识点已经在数据结构当中用代码实现过了,所以就进行了省略。

大部分算法我都用了 Python 和 Golang 两种语言去实现,这样做不仅是熟悉语言的一种方式,也可以让你对算法对掌握更加牢固,同时如果有些地方不太看得懂,可以试试看另一种语言对实现,说不定能够获得更清晰的思路

  • 算法复杂度分析
  • 排序算法
    • 冒泡排序
    • 选择排序
    • 插入排序
    • 希尔排序
    • 归并排序
    • 快速排序
    • 堆排序
  • 查找
    • 二分查找
    • 二叉搜索树
    • 红黑树
    • 散列表
  • 链表相关算法
  • 二叉树相关算法
  • 图相关算法
  • 字符串相关算法

(建议在本地查看.ipynb文件,方便运行和页内跳转)

主要是为了方便算法的练习,一些测试代码用的数据结构已经在文件里构造好了。并且只练习最高频最经典的一些算法,方便快速找到手感。

iridescent's People

Contributors

jiaming-cs avatar thetumbled avatar wolverinn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iridescent's Issues

选择排序python算法写错

def select_sort(lst):
if not lst:
return []
for i in range(len(lst) - 1):
smallest = i
for j in range(i, len(lst)):
if lst[j] < lst[smallest]:
smallest = j
lst[i], lst[smallest] = lst[smallest], lst[i] #已更正
return lst

红黑树部分的补充

作者写得不错,很感谢笔记的分享,这对复习和快速的准备很有帮助。
(个人看法)感觉红黑树那里可以建议看Algorithms第4版,因为我对比了一下Introduction to Algorithm和Algorithms第四版的引入,感觉后者那种把左倾红黑树作为2-3树(3阶B树)的二叉树表现形式的观点似乎更容易记忆;把3节点的2个key拆开,左边为红色右边为黑色,因此红色的节点表明和parent节点等black height;新插入的节点作为红色是为了假设它和parent节点等高, 插入之后的一系列操作可以理解是3节点变成4节点之后的分裂和中间节点的上升等等。

当然,这也可能是是因为我对经典红黑树理解不能...感觉四条性质放下来很抽象。

Hash表的问题

def insert(self, key, value):
index = self.hash_code(key)
head = self.table[index]
if not head: # 如果哈希表对应位置还是空的
self.table[index] = listNode(key, value)
else:
while head.next:
head = head.next
head.next = listNode(key, value)
这里insert重复的key,是有问题的

关于B树第一点最后一段话的内容纠正

首先非常感谢作者的分享,但我在阅读过程中发现了几处难以理解的地方。
在B树那一部分内容第一点的最后一段中,作者写道:

在这类应用中,磁盘IO的速度已经远远超过了读取到数据之后在内存中进行处理的速度,所以提升速度的关键是减小磁盘IO。

以上是文章原话,个人认为应该改成“磁盘IO的时间已经远远超过了读取到数据之后在内存中进行处理的时间”。
如果我的理解出现错误,希望作者能帮我具体指出。谢谢。

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.