二叉堆 发表于 2022-06-27 分类于 算法与数据结构 本文字数: 2k 阅读时长 ≈ 4 分钟 二叉堆C++实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105class BinaryHeap{public: void push(int v); int pop(); int get_heap_size() { return binary_heap.size(); } int peak_top() { return index_at(1); }; int index_at(int i) { return binary_heap[i - 1]; } void set_at(int i, int v) { binary_heap[i - 1] = v; };private: void adjust_heap(int idx); void adjust_heap_down(int idx); int compare(int left, int right); std::vector<int> binary_heap = {}; static int index;};int BinaryHeap::index = 0;// 往二叉堆中插入元素void BinaryHeap::push(int v){ binary_heap.push_back(v); index++; if (binary_heap.size() == 1) return; // 调整堆 adjust_heap(index);}// 获取二叉堆中的堆顶元素int BinaryHeap::pop(){ if (!binary_heap.size()) return -1; // 将最后一个叶子节点换到头节点 int ret = index_at(1); binary_heap[1] = index_at(index); adjust_heap_down(1); return ret;}// 调整堆void BinaryHeap::adjust_heap(int idx){ int root; int tmp; while ((root = idx / 2) > 0 && compare(index_at(idx), index_at(root)) < 0) { tmp = index_at(idx); set_at(idx, index_at(root)); set_at(root, tmp); idx = root; }}// 向下调整堆void BinaryHeap::adjust_heap_down(int idx){ int lchild; int tmp; while ((lchild = 2 * idx) <= index) { if (lchild + 1 <= index && compare(index_at(lchild + 1), index_at(lchild)) < 0) lchild = lchild + 1; if (compare(index_at(lchild), index_at(idx))) { tmp = index_at(idx); set_at(idx, index_at(lchild)); set_at(lchild, tmp); } idx = lchild; }}// 比较器int BinaryHeap::compare(int l, int r){ return l - r;}int main(){ BinaryHeap binaryh; binaryh.push(12); binaryh.push(17); binaryh.push(11); std::cout << binaryh.peak_top() << std::endl;}
C++学习笔记 发表于 2022-01-27 更新于 2022-03-07 分类于 程序语言 本文字数: 7.3k 阅读时长 ≈ 13 分钟 命名规范 函数名第一个字母大写,其后每个单词字母开头大写,驼峰式 变量名小写,单词之间下划线连接 类名,驼峰式。 阅读全文 »
mysql中explain的使用 发表于 2021-03-04 分类于 程序语言 本文字数: 2.9k 阅读时长 ≈ 5 分钟 explain1explain select * from tableexplain用在查询语句之前,会输出一个表,表中的每个字段有着各自的含义: 阅读全文 »
经典排序-思想解析 发表于 2020-12-02 更新于 2020-12-18 分类于 算法与数据结构 本文字数: 3k 阅读时长 ≈ 5 分钟 阐述每种排序方法的思想与复杂度。假设数组大小为$n$,且从小到大排列。冒泡排序每一趟排序:两两元素进行比较并交换位置,核心代码如下 阅读全文 »
决策树算法解析 发表于 2020-10-27 更新于 2020-10-31 分类于 机器学习 本文字数: 1.2k 阅读时长 ≈ 2 分钟 设样本有$m$个类别,$v$是属性中不同值的数量 ID3算法-信息熵信息量分类所期望的信息量: $I=-\sum_{i=1}^{m}\frac{s_{i}}{s}log_{2}(\frac{s_{i}}{s})$ 阅读全文 »
链表环-快慢指针的数学原理 发表于 2020-10-09 更新于 2021-12-02 分类于 算法与数据结构 本文字数: 740 阅读时长 ≈ 1 分钟 代码示例1234567891011121314151617public class Solution { public boolean hasCycle(ListNode head) { if(head == null){ return false; } ListNode slow = head; ListNode fast = head.next; while(slow != fast){ if(fast == null || fast.next == null){ return false; } slow = slow.next; fast = fast.next.next; } return true; }} 阅读全文 »
MySQL四种隔离级别 发表于 2020-09-12 分类于 程序语言 本文字数: 1.5k 阅读时长 ≈ 3 分钟 四种隔离级别 未提交读:READ UNCOMMITTED 提交读:READ COMMITTED 可重复读(默认):REPEATABLE READ 可序列化:SERIALIZABLE 阅读全文 »
Java学习笔记 发表于 2020-07-23 更新于 2020-10-22 分类于 程序语言 本文字数: 44k 阅读时长 ≈ 1:20 java基础常用数据类型 基本类型:byte, short, int, long, float, double, boolean, char 引用类型:String, 类 阅读全文 »
模型评估与选择(参考自西瓜书) 发表于 2020-06-03 更新于 2020-06-07 分类于 机器学习 本文字数: 2k 阅读时长 ≈ 4 分钟 经验误差与过拟合 错误率:如果在$m$个样本中有$a$个样本分类错误,则错误率$E=\frac{a}{m}$ 精度(accuracy):$1-\frac{a}{m}$,即“精度=1-错误率” 误差:学习器的实际预测输出与样本的真实输出之间的差异。 训练误差:学习器在训练集上的误差。 泛化误差:学习器在新样本上的误差。 过拟合(overfitting)与欠拟合(underfitting) 阅读全文 »