随笔分类 - Data Structure & Algorithm
C++ implement Data Structure and Algorithm
摘要:题目描述 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i+1<j 且满足 $$ A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j 1]
阅读全文
摘要:Huffman Implementation with Python 码表 | Token | Frequency | | | | | a | 10 | | e | 15 | | i | 12 | | s | 3 | | t | 4 | | space | 13 | | n | 1 | 生成 Huf
阅读全文
摘要:Tree Implementation with Python List of List 代码如下:
阅读全文
摘要:Python3 解析XML 层序遍历二叉树 keyword : python3, xml, xml.dom.minidom, 层序遍历, 层次遍历, 二叉树 part1 问题描述 面对如下 XML 文件,写程序按层序遍历二叉树,要求打印 text 节点中的 text 属性,并按文法的形式展示。 1.
阅读全文
摘要:《算法设计与分析基础》 之 穷举查找 对于背包问题,穷举查找算法对于任何输入都是非常低效率的。 旅行商问题和背包问题是NP困难问题中最著名的例子。 对于NP困难问题,目前没有已知的效率可以用多项式来表示的算法。 《算法的乐趣》 之 0 1背包问题 0 1 背包问题在题目中隐含了一个条件,就是每个物品
阅读全文
摘要:Greedy Algorithm 《数据结构与算法——C语言描述》 图论涉及的三个贪婪算法 1. Dijkstra 算法 2. Prim 算法 3. Kruskal 算法 Greedy 经典问题:coin change 在每一个阶段,可以认为所作决定是好的,而不考虑将来的后果。 如果不要求最对最佳答
阅读全文
摘要:introduction 大部分书籍介绍“动态规划”时,都会从“菲波纳切数列”讲起。 菲波纳切数列 递归解法 C++ 代码如下 DP 解决 DP 问题的关键因素之一,是要找出问题递归方程,然后就好解了。 菲波纳切数列的递归定义如下: 纯 DP 自底向上,使用数组存储过程值。 解题代码
阅读全文
摘要:leetcode 136. Single Number Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should
阅读全文
摘要:两种简单实现 第一种 链表 第一种实现利用链表存储数据,每次在表头插入元素;getMin 时,遍历一遍线性表找到最小的元素,然后将之删除、值返回。(getMax 同理)。 链表的在头节点的插入和删除时间复杂度都是O(1),所以用链表实现的堆,insert 时间复杂度是O(1)、getMin 时间复杂
阅读全文
摘要:对于大量的输入数据,链表的线性访问时间太慢,不宜使用——《数据结构与算法分析——C 语言描述》 p 65 对于大量的输入数据,适合用树结构,大部分操作都是 O( log N )。 二叉树 1. 实现 节点定义 template<typename T> struct Node { Node(T v)
阅读全文
摘要:表、栈和队列是最简单和最基本的三种数据结构——《数据结构与算法分析—— C 语言描述》 表 应用范畴: i. 多项式 ADT i. 基数排序(多趟桶式排序) 代码实现: i. 多重表 链表的游标实现 代码实现: 栈 栈又叫做 LIFO(后进先出)表——《数据结构与算法分析—— C 语言描述》 应用范
阅读全文
摘要:散列表 i. 散列函数 i. 冲突解决 ii. 分离链表法 ii. 开放地址法 iii. 线性探测法 iii. 平方探测法 iii. 双散列 ii. 再散列 ii. 可扩散列 i. 装填因子:元素...
阅读全文
摘要:C++实现的“桶排序”,采用了模板技术。底层数据结构是 std::map ,其本质是优先队列。 时间复杂度是O(M + N),其中 M 是数据范围的最大值,N 是数据量。额外的,当 M = O(N) 时,时间复杂度是 O(N)。 #include <iostream> #include <map>
阅读全文
摘要:1. 题目描述 给定一个数组和一个数(该数不一定在数组中),从数组里删掉这个数字,返回剩下的数组长度。 如:A[] = {1, 2, 3, 4, 5}, 要删除数字3, 那么返回数组长度为4. 亲爱的小伙伴们,题目是不是很简单呢? 提示: int removeElement(int A[], int
阅读全文