机器学习期末复习 机器学习期末复习 第一章 机器学习简介 机器学习的概念 是一种实现人工智能的方法 机器学习的要素 模型:对于监督学习,模型就是要学习的条件概率或者决策函数 策略 目标:选择最优的模型 损失函数,损失函数越小,模型就越好 平方损失函数:\(L(Y,f(X))=(Y-f(x))^2\), 其中\(Y\)是标签(真实值), \(f(X)\)是预测值。 风险函数(期望损失):损失函数的期望 经验风 2023-05-16 机器学习 #机器学习
WSL2下linux header的安装 WSL2下linux header的安装 正常的linux发行版执行linux-headers-$(uname -r)命令就能装上内核头文件,但WSL2作为一个不一般的linux发行版,并没有直接给出安装包,要手动安装才能正常使用。 安装步骤 确认Kernel版本 1uname -r 安装相应依赖 12sudo apt install libelf-dev build-essential pkg- 2023-05-09 linux #linux
pair tuple 作为 unordered_map unordered_set 的键值 pair tuple 作为 unordered_map unordered_set 的键值 C++ STL中并没有pair的hash特化,所以如果想把pair当作键用在unordered_map中的话,就需要自己实现hash函数。网上的大部分实现的hash函数虽然可以用,但是其效率其实相当糟糕,他会导致碰撞严重,从而性能低下。 这里贴出一个《C++ 标准库(第二版)》中作者给出的绝佳方案,“7.9 2023-05-06
Bellman-Ford单源最短路径算法 Bellman-Ford单源最短路径算法 Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法。该算法由 Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年,而实际上 Edward F. Moore 也在 1957 年发布了相同的算法,因此,此算法也常被称为 2023-04-22 数据结构与算法 #数据结构与算法 #leetcode
EffectiveCpp-41:了解隐式接口和编译期多态 Effective C++ Item 41 了解隐式接口和编译期多态 显式接口和运行时多态 面向对象编程的世界围绕着显式接口和运行时多态。举个例子,考虑下面的类(无意义的类): 12345678class Widget {public: Widget(); virtual ~Widget(); virtual std::size_t size() const; v 2023-04-20 C++ > Effective C++ #C++ #Effective C++
EffectiveCpp-21:必须返回对象时,不要返回reference Effective C++ Item 21:必须返回对象时,不要返回reference 众所周知,C++中函数传参pass-by-value的效率是要低于pass-by-reference的,所以函数传参尽量以pass-by-reference-to-const 替换 pass-by-value,但是在函数返回的时候,返回一个reference并不一定是一件好事,因为这可能会导致我们传递一些ref 2023-04-20 C++ > Effective C++ #C++ #Effective C++
动态规划的几种实现方式 动态规划的几种实现方式 动态规划又几种不同的实现方式,以leetcode第1143题为例: 很明显这是一道动态规划的题,而动态规划有多种不同的实现方式,比如最常见的两种方式是迭代递推法和记忆化搜索法,这两种方法的主要区别在于,迭代递推法是自底向上递推,而记忆化搜索是自顶向下搜索,在搜索过程中保存计算结果,避免重复计算。 递归搜索 + 保存计算结果 = 记忆化搜索 1234567891011121 2023-04-17 数据结构与算法 #数据结构与算法 #leetcode
前缀树 前缀树 前缀树(又称为字典树或者称为字典映射树、查找树),是一种树形结构。前缀树的作用是:对于一组字符串,找到这组字符串的公共前缀,或者判断一个字符串是否是这组字符串中的某一个串的前缀。 前缀树的主要性质是:根节点不包含字符,每一个节点的所有子节点包含的字符都不相同。另外,从根节点到某一个节点,路径上经过的字符连接起来,即为该节点对应的字符串。 以下是前缀树的时间复杂度描述: 空间复杂度 2023-04-08 数据结构与算法 #数据结构与算法 #leetcode
单调栈 单调栈 单调栈是一种运用栈数据结构来解决一些特定问题的解题技巧。它主要用于解决需要快速寻找一个元素左(或右)边第一个比它大(或小)的元素的问题。 使用单调栈的基本思路是保持栈内的元素单调递增或单调递减,栈顶元素是当前栈内最大或最小的元素,同时记录下每个元素的相关信息,如坐标、面积、数量等,根据这些信息计算出所需的结果。 单调栈的实现主要有两种,第一种是从前往后遍历数组,第二种是从后往前遍历数组。 2023-04-08 数据结构与算法 #数据结构与算法 #leetcode
排序 排序算法 快速排序 快速排序是一种常见的排序算法,其核心思想是分治法。下面是快速排序的步骤: 选取一个基准数(pivot) 将序列中比基准数大的元素放在基准数的右边,比基准数小的元素放在基准数的左边。 递归地对基准数左右两边的序列进行排序,直到序列长度为1或0。 快速排序中最重要的就是第2步,也就是partation阶段。快速排序有很多不同的实现方式,每次选择最右侧的数作为pivot进行par 2023-04-04 数据结构与算法 #数据结构与算法 #leetcode