<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chenf1999的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chenf1999</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chenf1999]]></copyright><item><title><![CDATA[Bellman-Ford、Dijkstra、Floyd算法]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/114819429</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/114819429</guid><author>chenf1999</author><pubDate>Mon, 15 Mar 2021 15:09:11 +0800</pubDate><description><![CDATA[文章目录Bellman-Ford算法解决的问题思路leetcode例题Dijkstra算法解决的问题思路leetcode例题Floyd算法解决的问题思路leetcode例题
Bellman-Ford算法
Bellman-Ford用于找出单源最短路径，即从源节点到图中每个节点的最短路径，支持边权重为负的情况。
算法利用了动态规划的思想，实现简单，但时间复杂度为O(VE)O(VE)O(VE)，非常高。
解决的问题

从A出发是否可以到达各个节点
从A出发到达各个节点的最短路径
图中是否存在负环路（权重之和为负数]]></description><category></category></item><item><title><![CDATA[[leetcode题解] 第995题Minimum Number of K Consecutive Bit Flips]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/113850927</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/113850927</guid><author>chenf1999</author><pubDate>Thu, 18 Feb 2021 23:38:09 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/minimum-number-of-k-consecutive-bit-flips/
文章目录分析差分数组解法代码
分析
不难想到这样一种解法:依次遍历数组A，如果A[i] == 0，第i个位置就需要翻转。此时若i + K &gt; n，则无法实现翻转，返回-1；否则手动修改数组A[i: i+K-1]，再遍历下一个位置。在这个过程中直接统计出总的翻转次数即为答案。
这个解法虽然直观，但是时间复杂度为O(nK)O(nK)O(nK)，不是一个好的]]></description><category></category></item><item><title><![CDATA[[leetcode题解] 第480题Sliding Window Median]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/113608875</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/113608875</guid><author>chenf1999</author><pubDate>Wed, 03 Feb 2021 17:53:13 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/sliding-window-median/
文章目录分析
分析


]]></description><category></category></item><item><title><![CDATA[[leetcode题解] 第1202题Smallest String With Swaps]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/112524707</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/112524707</guid><author>chenf1999</author><pubDate>Wed, 13 Jan 2021 16:43:19 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/smallest-string-with-swaps/
文章目录分析解法并查集排序思路一排序思路二排序思路三
分析
需要把这道题看成图论的题目才好做：将字符串中的索引视为图的节点，一个pair对意味着两个节点之间存在一条无向边。那么答案就可以这样来得到：对无向图中的每个连通分量所代表的字符串分别进行排序，再把字符按照索引填入原位置。
这是因为交换具有传递性，即a与b可交换，b与c可交换，那么a一定可与c交换（交换次数不受限制）。因此在连通分量]]></description><category></category></item><item><title><![CDATA[二维离散傅里叶变换的权值矩阵计算]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/112253585</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/112253585</guid><author>chenf1999</author><pubDate>Tue, 05 Jan 2021 21:42:49 +0800</pubDate><description><![CDATA[例题
计算以下图像的离散傅里叶变换
f=[1441244224421441]
f=\begin{bmatrix}1&amp;4&amp;4&amp;1\\2&amp;4&amp;4&amp;2\\2&amp;4&amp;4&amp;2\\1&amp;4&amp;4&amp;1\end{bmatrix}
f=⎣⎢⎢⎡​1221​4444​4444​1221​⎦⎥⎥⎤​
计算方式当然不是通过原始公式硬算，而是构造权值矩阵来计算。
考虑二维DFT的分解：
F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−]]></description><category></category></item><item><title><![CDATA[局部搜索解千万级别N皇后问题]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/112060545</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/112060545</guid><author>chenf1999</author><pubDate>Fri, 01 Jan 2021 15:02:54 +0800</pubDate><description><![CDATA[作业10
题目
局部搜索解n皇后，并测试n的极限
实验v0
v0版本我实现了最基本的局部搜索算法，该版本解n=1000n=1000n=1000需要超过777分钟，n=10000n=10000n=10000时间太长，超过极限。

  
    
    
  

状态的表示
首先，使用哪种数据结构表示n皇后问题的一个状态是很重要的，直接影响到算法的效率。我使用一个一维数组来表示状态，i, board[i]表示一个皇后的行、列位置。
初始时要随机生成一个状态，此时就可以解决掉所有行和列上的冲突，即保证每一行、每]]></description><category></category></item><item><title><![CDATA[ubuntu18.04修改MAC地址以及分辨率]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/109725076</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/109725076</guid><author>chenf1999</author><pubDate>Mon, 16 Nov 2020 17:24:35 +0800</pubDate><description><![CDATA[实验室的电脑是通过固定MAC地址和IP地址来上网的，而我刚安装的ubuntu18.04要修改MAC地址还比较麻烦，记录一下这些问题。
修改MAC地址
安装ipconfig
网上别人的教程都是互相抄来抄去，基本都是sudo ipconfig eno1 hw ether xxx那一套，如这篇博客。但首先，没网的电脑连ifconfig命令都没有，只能切换系统通过链接去下载net-tools工具，再拷贝到ubuntu下安装。
此外，我用上述操作时，并不能实现每次开机都自动运行脚本，而且，就算是临时的修改MAC地址，]]></description><category></category></item><item><title><![CDATA[[leetcode题解] 第1648题Sell Diminishing Valued Colored Balls]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/109570325</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/109570325</guid><author>chenf1999</author><pubDate>Mon, 09 Nov 2020 11:22:56 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/sell-diminishing-valued-colored-balls/
文章目录分析解法一代码：解法二代码
分析
很容易找到这道题的贪心策略：每次卖出价值最大（数目最多）的那种球。
我们可以使用最大堆来辅助获取最大的inventory[i]，把它加到ans后再把inventory[i] - 1放回堆中，同时orders--。这种思路很简单，但效率太低了，时间复杂度为O(orders⋅logn)O(orders\cdot logn)O(o]]></description><category></category></item><item><title><![CDATA[[总结] matlab转numpy代码的坑]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/109504214</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/109504214</guid><author>chenf1999</author><pubDate>Thu, 05 Nov 2020 10:25:45 +0800</pubDate><description><![CDATA[最近在忙着把一个用matlab写的图像处理转numpy，由于自己此前对matlab并不熟悉，因此遇到了不少坑，在此总结一下。
文章目录一、下标二、行、列顺序三、稀疏矩阵四、获取滤波核五、卷积
一、下标
matlab中下标从1开始，因此转成numpy时下标需要减一
// matlab
dx = diff(s,1,2);

# numpy
dx = np.diff(img, 1, 1)

二、行、列顺序
这个很重要，matlab中列优先的，而numpy是行优先的，所以在用到reshape这种操作时就要非常注意。]]></description><category></category></item><item><title><![CDATA[[leetcode题解] 剑指offer20：表示数值的字符串]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/109128968</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/109128968</guid><author>chenf1999</author><pubDate>Sat, 17 Oct 2020 10:52:54 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/submissions/
文章目录分析解法代码
分析
这道题主要考察思维全面性和编程能力，如果不能归纳出所有的案例，编码时就要处理各种细节，难以写出高质量的代码。
举几个例子：
3.2e+9、3.e9、.e8、+.3e-2这些都是有效的数值。乍一看很难理解，但只要我们明白数值由整数部分、小数部分、指数部分组成就容易理解了。
去除字符串首尾的空格后，表示数值的字符串模式为]]></description><category></category></item><item><title><![CDATA[leetcode题解：剑指offer14: 剪绳子]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/109007942</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/109007942</guid><author>chenf1999</author><pubDate>Sun, 11 Oct 2020 21:51:49 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/jian-sheng-zi-lcof/
文章目录解法一代码解法二
解法一
这道题属于动态规划的经典面试题，考虑dp[i]表示对i进行划分得到的最大乘积，注意：dp[i]不一定大于i。因此将n划分为i和n-i后，我们要判断是否需要继续对i和n-i进行划分。
注意：只需要在[1, n/2]的范围内寻找i，这样可以节省时间。
代码
class Solution {
    public int integerBreak(int n) {
     ]]></description><category></category></item><item><title><![CDATA[卡特兰数通项公式详细推导过程]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/108740665</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/108740665</guid><author>chenf1999</author><pubDate>Tue, 22 Sep 2020 20:43:14 +0800</pubDate><description><![CDATA[设法求解下面这个递归式或给出其最低上界的阶，设P(1)=1P(1)=1P(1)=1
P(n)=∑k=1n−1P(k)P(n−k)
\large{P(n)=\sum^{n-1}_{k=1}P(k)P(n-k)}
P(n)=k=1∑n−1​P(k)P(n−k)

易知P(n)P(n)P(n)就是卡特兰数，下面用生成函数法求解出其通项公式。
设生成函数为：
g(x)=h(1)x+h(2)x2+...+h(k)xk+...
\large{g(x)=h(1)x+h(2)x^2+...+h(k)x^k+...}
g(x]]></description><category></category></item><item><title><![CDATA[pytorch使用tensor作为tensor的索引]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/108552376</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/108552376</guid><author>chenf1999</author><pubDate>Sat, 12 Sep 2020 22:15:28 +0800</pubDate><description><![CDATA[在使用pytorch时，我们经常会看到tensor1[tensor2]这样的代码，而不同的tensor2会导致不同的索引方式，本文详细介绍使用tensor作为索引的原理。
首先构造tensor1：
&gt;&gt;&gt; a = torch.randn(10, 5)
&gt;&gt;&gt; a
tensor([[-0.9434, -2.8668, -0.4331, -1.6842, -0.1823],
        [-1.4545, -1.0065,  0.3228,  0.7457,  0.622]]></description><category></category></item><item><title><![CDATA[pytorch中的gather和scatter函数]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/108546598</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/108546598</guid><author>chenf1999</author><pubDate>Sat, 12 Sep 2020 16:24:40 +0800</pubDate><description><![CDATA[最近看代码时遇到了两个函数，查阅pytorch后一时半会儿也没弄懂，现在写篇笔记来加深一下印象。
gather
torch.gather(input, dim, index, out=None, sparse_grad=False) → Tensor
沿着给定的维度dim，将输入input指定位置的值聚合起来，指定位置由index决定。
index和input必须有相同数量的维度，且满足1 &lt;= index[dim] &lt;= input[dim]、index[other_dims] == inpu]]></description><category></category></item><item><title><![CDATA[详解leetcode石头合并问题]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/108273063</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/108273063</guid><author>chenf1999</author><pubDate>Sun, 30 Aug 2020 17:00:23 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/minimum-cost-to-merge-stones/
文章目录分析区间动态规划三部曲
分析
这道题是一道经典的区间dp问题，旨在通过动态规划去求一个区间的最优解，通过将大区间划分为很多个小区间，再由小区间的解来组合出大区间的解，这体现了分支的思想。
区间动态规划三部曲

定义状态：dp[i, j]为区间[i, j]的最优解
定义状态转移方程：最常见的写法为：dp[i,j] = max/min{dp[i,j], dp[i, k] + dp]]></description><category></category></item><item><title><![CDATA[leetcode题解：第301题Remove Invalid Parentheses]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/108233030</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/108233030</guid><author>chenf1999</author><pubDate>Wed, 26 Aug 2020 09:55:23 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/remove-invalid-parentheses/
文章目录解法一、BFS代码解法二、回溯代码解法三、有限制的回溯代码
解法一、BFS
这题要求所有的解，所以我们应当想到用搜索来解决，BFS的思想会比较直观：

由题目要求易知：所有的解都是由原始字符串删除了相同数量的括号得到的
对于删除的括号数量i，生成对应的所有的字符串，它们属于第i个level
对于每个level，判断其中的字符串是否有解：若有，则所有的解都来自于这个level；否则]]></description><category></category></item><item><title><![CDATA[leetcode题解：第399题Evaluate Division]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/108175888</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/108175888</guid><author>chenf1999</author><pubDate>Sat, 22 Aug 2020 23:14:48 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/evaluate-division/
分析
这道题的目的很明确，逻辑也容易理解，人可以很容易地计算出这种方程式的结果，但怎么把这种方程式在程序中表示是一个难题。换言之，正确地表示方程式，就能把这个看似难处理的问题转换成容易解决的问题。
解法一、图遍历
如果给出提示，把这题与图联系起来，能否快速找到解决办法呢？
我们可以很自然地想到，可以用带权图来表示输入的所有方程式：a / b = value表示两条边：a-&gt;b，权重为value和b-]]></description><category></category></item><item><title><![CDATA[堆排序详解]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/107953106</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/107953106</guid><author>chenf1999</author><pubDate>Wed, 12 Aug 2020 19:59:25 +0800</pubDate><description><![CDATA[上文提到的leetcode第215题除了快速排序的二分partition解法，还可以用堆排序来解决，小小一道medium题居然汇集了快排和堆排这两位卧龙凤雏，实属难得。
文章目录数据结构-堆完全二叉树堆堆排序思想构造大根堆代码
数据结构-堆
完全二叉树
首先，堆是一棵完全二叉树，因此其具备完全二叉树的全部特点：

除了最后一层外，其余层的节点数都达到最大值，而最后一层的节点都集中在左边。
节点的编号与其对应的满二叉树中节点编号相同
若最后一个非叶子节点的编号为i，则编号0~i的节点都是非叶子节点，编号i+1]]></description><category></category></item><item><title><![CDATA[Partition算法详解]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/107937829</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/107937829</guid><author>chenf1999</author><pubDate>Tue, 11 Aug 2020 17:05:54 +0800</pubDate><description><![CDATA[partition算法有着非常重要的应用，这个算法的思想虽然简单，但具体实现的细节却比较多，今天我重点复习了这个算法，本文记录我对这个算法的理解。
文章目录Partition算法解析二分Partition三分Partition二分Partition应用时间复杂度代码三分Partition应用代码
Partition算法解析
二分Partition
快速排序作为非常著名的排序算法，其思想却很简单：每次从数组中选一个数作为pivot，然后将数组划分为2部分，小于等于pivot数的在其左边，大于等于pivot的数]]></description><category></category></item><item><title><![CDATA[leetcode题解：第142题Linked List Cycle II]]></title><link>https://blog.youkuaiyun.com/chenf1999/article/details/107872005</link><guid>https://blog.youkuaiyun.com/chenf1999/article/details/107872005</guid><author>chenf1999</author><pubDate>Fri, 07 Aug 2020 23:08:49 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/linked-list-cycle-ii/
文章目录分析解法、双指针代码复杂度分析
分析
这道题在第141题环形链表的基础上，不仅要求判断链表是否有环，还要求在有环的情况下给出入环的节点。如果用哈希表的话，自然与第141题解法相同，但那并不是这种题目的本意。单纯用双指针，只能判断是否有环，但快慢指针的相遇点并不一定在入环处，需要巧妙地改进双指针的解法来完成本题。
解法、双指针
链表无环时自不必说，当链表有环时，我们分两个阶段来解决这个问题：
]]></description><category></category></item></channel></rss>