MaggicQ's Blog

路漫漫其修远兮

算法笔记-分治法

分治法 主定理 对于通用分治递推式: $T(n) = aT(n/b) + f(n)$ 那么: 合并排序 对于一个需要排序的数组,合并排序将它一分为二,并对每个子数组递归排序,然后把这两个排好序的子数组 组合并为一个有序数组。 其中 $Merge$ 函数是将两个有序数据进行合并: 复杂度分析: 键值比较次数 $C(n)$ 当 $n > 1$ 时, $C(n...

算法笔记-变治法

变治法 变治法(transform-and-conquer),将问题分解成两个阶段工作: ”变“的阶段,把问题的实例变得更容易求解, ”治“的阶段,对实例进行求解。 变治思想有三种主要的类型: 变换为同样问题的一个更简单或者更方便的实例,实例化简。 变换为同样实例的不同表现,称为 改变表现。 变换为另一个问题的实例,这种问题的算法是已知的,称为问题化简。 下面是一...

Leetcode题解-回溯

本文目录 基本思想 常见题目 括号生成 子集 子集 II 全排列 全排列 II 组合总和 组合总和 II 单词搜索 N皇后 分割回文串 基本思想 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不...

算法笔记-减治法

减治法 减治(decrease-and-conquer)利用一个问题给定实例的解和同样问题较小实例的解之间的某种关系, 一旦建立了这种关系,我们既可以从顶至下,也可以从底至上地来运用该关系。 自底而上的版本往往是迭代实现的,从求解问题的一个较小实例开始,该方法有时也成为增量法(Incremental Approach)。 减治法有三种主要的变化形式: 减去一个常量:计算$a^...

Leetcode题解-字符串与数列

本文目录 数列 两数之和 三数之和 四数之和 除自身以外数组的乘积 删除排序数组中的重复项 盛最多水的容器 螺旋矩阵 合并两个有序数组 接雨水 乘积最大子序列 求众数 旋转数组 递增的三元子序列 数组中的第K个最...

算法笔记-减治法

减治法 减治(decrease-and-conquer)利用一个问题给定实例的解和同样问题较小实例的解之间的某种关系, 一旦建立了这种关系,我们既可以从顶至下,也可以从底至上地来运用该关系。 自底而上的版本往往是迭代实现的,从求解问题的一个较小实例开始,该方法有时也成为增量法(Incremental Approach)。 减治法有三种主要的变化形式: 减去一个常量:计算$a^...

算法笔记-贪婪技术

贪婪技术 贪婪法通过一系列的步骤来构造问题的解,每一步对目前构造的部分解一个拓展,直到获得问题的完整解为止,这个技术的核心是,所做的每一步选择都必须满足以下条件: 可行的(feasible),即它必须满足问题的约束。 局部最优(locally optimal):它是当前步骤中所有可选选择中的最佳局部选择 不可取消(irrevocable):即选择一旦做出,在算法的后面步骤中...

理解python装饰器

本篇文章翻译自stackoverflow中一个关于python装饰器问答下的高票回答 函数是一种对象 为了理解装饰器,你必须理解在pyhton中,函数是一种对象。这有着重要的意义,让我们通过下面这个例子看看原因: def shout(word="yes"): return word.capitalize()+"!" print(shout()) # outputs : 'Ye...

Linux内核的启动

Linux 内核的启动 前几天因为Ubuntu升级,本来装的双系统在开机启动时出现了一些问题,因为我对开机启动方面的不了解,最后导致了系统的重装,产生了很多不必要的麻烦,还丢失了很多数据。所以在这里总结了一些Linux系统启动方面的常识,希望下次再遇到能用上:) 启动过程概述 下面是简化之后的整个启动过程: BIOS或者启动固件加载并运行引导装载程序 引导装载程序在磁盘上找...

Linux进程与资源的监控

计算机中的硬件资源主要有三种:CPU, 内存 和 I/O 。进程为获得这些资源资源相互竞争,而操作系统(内核)则负责公平地分配资源。这里介绍一些linux系统下性能监控的简单方法。 Linux下进程与资源的利用详解 进程跟踪 ps命令 ps命令可以帮助我们查看系统中运行的进程。比如: luo@luo-ThinkPad-Edge-E431:~$ ps PID TTY ...