<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SIONCIOSC的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SIONCIOSC</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SIONCIOSC]]></copyright><item><title><![CDATA[python3 堆]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107532904</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107532904</guid><author>SIONCIOSC</author><pubDate>Thu, 23 Jul 2020 13:31:38 +0800</pubDate><description><![CDATA[完全二叉树

一棵深度为k的有n个结点的二叉树，对树中的结点按从上至下、从左到右的顺序进行编号，如果编号为i（1≤i≤n）的结点与满二叉树中编号为i的结点在二叉树中的位置相同，则这棵二叉树称为完全二叉树。



完全二叉树判定算法思路

判断一棵树是否是完全二叉树的思路：


如果树为空，则直接返回错
	如果树不为空：层序遍历二叉树
	如果一个结点左右孩子都不为空，则pop该节点，将其左右孩子入队列；
		如果遇到一个结点，左孩子为空，右孩子不为空，则该树一定不是完全二叉树；
		如果遇到一个结点，左孩子不]]></description><category></category></item><item><title><![CDATA[3-2 数组中常见问题-解决方法-对撞指针]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107303662</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107303662</guid><author>SIONCIOSC</author><pubDate>Sun, 12 Jul 2020 19:15:09 +0800</pubDate><description><![CDATA[167. 两数之和 II - 输入有序数组


给定一个已按照升序排列 的有序数组，找到两个数使得它们相加之和等于目标数。

函数应该返回这两个下标值 index1 和 index2，其中 index1 必须小于 index2。

说明:

返回的下标值（index1 和 index2）不是从零开始的。

你可以假设每个输入只对应唯一的答案，而且你不可以重复使用相同的元素。

示例:

输入: numbers = [2, 7, 11, 15], target = 9
 
输出: [1,2]
 
...]]></description><category></category></item><item><title><![CDATA[3-1 从二分查找法看如何写出正确的程序]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107144493</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107144493</guid><author>SIONCIOSC</author><pubDate>Sun, 05 Jul 2020 20:46:21 +0800</pubDate><description><![CDATA[如何写出正确的程序





设定“循环不变量”，即我们寻找的数据索引一定在该范围中：[l .. r]。
	数组中可查找的数据的索引范围为：[0, n-1]，前闭后闭。
	设置循环结束条件：当 l &lt;= r，区间 [l ... r] 依然是有效的，数组中仅包含一个元素
	设置返回条件：
	arr[mid] == target，返回mid
		arr[mid] &gt; target，target在 [mid+1 ... r]中
		arr[mid] &lt;target，target在 [l ....]]></description><category></category></item><item><title><![CDATA[2-6 均摊时间复杂度分析]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107126738</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107126738</guid><author>SIONCIOSC</author><pubDate>Sat, 04 Jul 2020 16:55:30 +0800</pubDate><description><![CDATA[均摊时间复杂度分析

动态数组 Vector

将上述操作都放在push这个方法中：每当数组容量满了之后，需要再分配一倍的内存，并将之前的旧数据存到新数组中。



数据量为n时，该push方法的均摊时间复杂度为O(1)。

用大数据量做测试，随着数据量的递增，算法的事件复杂度线性增加，验证完成。


...]]></description><category></category></item><item><title><![CDATA[2-5 递归算法的复杂度分析]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107125645</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107125645</guid><author>SIONCIOSC</author><pubDate>Sat, 04 Jul 2020 16:18:18 +0800</pubDate><description><![CDATA[递归算法的复杂度分析

不是有递归的算法的时间复杂度都为O(nlogn)！

递归中进行一次递归调用的复杂度分析



如果递归函数中，只进行一次递归调用，递归深度为depth；

在每个递归函数中，时间复杂度为T；

则总体的时间复杂度为O(T * depth)





递归中进行多次递归调用的复杂度分析







归并排序用的就是分治法的思想，数组长度为n，每层计算的事件复杂度为O(n)，树的深度为O(logn)，因此总的时间复杂度为O(nlogn)。

主定理

主定理，归纳了递归函数的时间复杂]]></description><category></category></item><item><title><![CDATA[2-2 对数据规模有一个概念]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107105927</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107105927</guid><author>SIONCIOSC</author><pubDate>Fri, 03 Jul 2020 15:14:35 +0800</pubDate><description><![CDATA[数据规模的概念

如果想要在1s内解决问题：

O(n^2)的算法可以处理大约10^4级别的数据
	O(n)的算法可以处理10^8级别的数据 10^8 = 1亿
	O(nlogn)的算法可以处理10^7级别的数据 log2^9 = 20.723
算法可能还有较大的系数，所以保险一点的话，可以将上述级别的数据量除以2，或者是10。

c++，累加1亿条数据，大约需要花费0.4s的时间。

python，累加1亿条数据，大约需要花费4s的时间

空间复杂度

多开一个辅助的数组：O(n)
	多开一个辅助的二..]]></description><category></category></item><item><title><![CDATA[2-1 面试中的时间复杂度分析]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107103676</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107103676</guid><author>SIONCIOSC</author><pubDate>Fri, 03 Jul 2020 13:58:45 +0800</pubDate><description><![CDATA[面试中的时间复杂度分析

到底什么是大O

n表示数据规模

O(f(n))表示运行算法所需要的执行的指令数，与f(n)成正比。

举例

二分查找法 O(logn)
	寻找数组中的最大值/最小值 O(n)
	归并排序 O(nlogn)
	选择排序 O(n^2)
到底什么是大O

在学术界，严格地讲，O(f(n))表示算法执行的上界。归并排序算法的时间复杂度是O(nlogn)，也是O(n^2)。

在业界，我们使用O表示算法执行的最小上界。所以我们不会说归并排序算法的事件复杂度是O(n^2)，都是说O(nl]]></description><category></category></item><item><title><![CDATA[1-4 如何回答算法面试官问题]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107103319</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107103319</guid><author>SIONCIOSC</author><pubDate>Fri, 03 Jul 2020 12:59:40 +0800</pubDate><description><![CDATA[解决算法面试问题的整体思路

注意题目中的条件

给定一个有序数组
	可以考虑用二分查找法
	
	有一些题目中的条件本质是暗示
	设计一个O(nlog(n))的算法 ——&gt;  8成会使用分治法，也可能先排序，再做剩余的操作
		无需考虑额外的空间      ——&gt;  可以考虑开辟额外的空间，用空间换时间
		数据规模大概是10000    ——&gt;  可以考虑设计一个O(n2)的算法，因为O(nlogn)的算法可以处理百万级或千万级的数据
	
当没有思路...]]></description><category></category></item><item><title><![CDATA[1-3 如何准备算法面试]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107097490</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107097490</guid><author>SIONCIOSC</author><pubDate>Fri, 03 Jul 2020 08:04:44 +0800</pubDate><description><![CDATA[如何准备算法面试



准备面试和准备算法面试是两个概念

算法面试，只是面试中的一个环节。



算法面试并没有那么难

远远不需要啃完一本《算法导论》



《算法导论》强调理论证明，而这些证明可能是很困难的，在实际中的用途并不大。



高级的数据结构和算法，面试中提及的概率很低。

红黑树
	B-Tree
	斐波那契堆
	计算几何
	数论
	FFT
远远不需要达到信息学竞赛的水平



不要轻视基础算法和数据结构，而只关注“有意思”的题目

各种排序算法
	基础数据结构和算法的实现：如堆、二叉树..]]></description><category></category></item><item><title><![CDATA[1-2 算法面试只是面试的一部分]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107097477</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107097477</guid><author>SIONCIOSC</author><pubDate>Fri, 03 Jul 2020 07:42:48 +0800</pubDate><description><![CDATA[算法面试优秀不意味着技术面试优秀

面试过程中，需要按照以下几个方面做好准备：

项目经历，项目中遇到的实际问题
	你遇到的印象最深的Bug是什么？
	面向对象
	设计模式
	网络相关
	安全相关
	内存相关
	并发相关
	系统设计，Scalability
	等等


技术面试优秀不意味着能拿到Offer

技术面试只是面试的一部分。面试不仅仅考察你的技术水平，还是了解你的过去以及形成的思考行为方式。



关于过去，参与的项目至关重要



如何找到项目？

参与实战课程学习
	慕课网
		Cour...]]></description><category></category></item><item><title><![CDATA[1-1 算法面试不仅仅是正确的回答问题]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107097437</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/107097437</guid><author>SIONCIOSC</author><pubDate>Fri, 03 Jul 2020 07:26:44 +0800</pubDate><description><![CDATA[算法面试不仅仅是正确的回答问题



在面对面试中的算法问题时，有一个合理的思考路径

面对算法面试，不要畏惧。

因为面试中的算法问题，通常并不复杂，远远不需要啃完一本《算法导论》


算法面试是什么？

不代表能够正确回答每一个问题，在面对问题时，一个合理的思考路径更重要，这也是正确完成算法面试的前提。



什么是合理的思考路径？

算法面试的目的不是正确回答每一个问题，而是展示给面试官一个你思考问题的方式，如何去解决问题的。



“正确”本身是一个相对的概念

算法面试不是高考。

可以把...]]></description><category></category></item><item><title><![CDATA[【信息论】《吴军—信息论30讲》学习笔记（三）：条件熵和信息增益：你提供的信息到底值多少钱？]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/100690529</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/100690529</guid><author>SIONCIOSC</author><pubDate>Tue, 10 Sep 2019 10:34:38 +0800</pubDate><description><![CDATA[之前，吴军老师介绍了信息的正交关系，也就是寻找能够互补信息的重要性。之后，又介绍了互信息，讲了两条不同信息之间的相关性。

这一讲，我们更加系统地、量化地分析一下，如果别人你提供了一条信息，到底有多大的价值。下面用信息理论对这个问题做一个比较严格的分析。

我们假定，股市的涨跌是个随机变量，用X表示，对于她的全部的不确定性，就是X概率分布所对应的的信息熵，通常用H(X)表示。

如果你得到了一些内...]]></description><category></category></item><item><title><![CDATA[【信息论】《吴军—信息论30讲》学习笔记（二）：信息正交性 在信息很多的情况下如何作决策？]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/100653190</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/100653190</guid><author>SIONCIOSC</author><pubDate>Mon, 09 Sep 2019 10:39:42 +0800</pubDate><description><![CDATA[这一讲，吴军老师用告诉你，当你面对信息很多时，如何利用和组合信息，提高自己的决策水平。

首先，信息和能量具有一定的相关性，但是它们的性质完全不同，比如信息并不具有守恒的特点。你将一条信息告诉别人，你自己并不损失这条信息。

除此以外，不同信息彼此之间的关系，以及使用相同或者不同信息带来的结果，它在这些方面和能量也完全不同。

我们今天就从信息和能力的对比出发，谈三个获得有效信息和利用好信息的要点...]]></description><category></category></item><item><title><![CDATA[【信息论】《吴军—信息论30讲》学习笔记（一）：冗余度 史记和圣经哪个信息量大]]></title><link>https://blog.youkuaiyun.com/SIONCIOSC/article/details/100533361</link><guid>https://blog.youkuaiyun.com/SIONCIOSC/article/details/100533361</guid><author>SIONCIOSC</author><pubDate>Wed, 04 Sep 2019 10:14:24 +0800</pubDate><description><![CDATA[吴军老师根据自己的经验，善用信息冗余，总结如下三点体会：

1、讲东西要通过加入一些看似是废话，但是实际上能从侧面诠释你的想法的句子，帮助对方理解你的意思。比如我常说“换句话说”，“比如说”，“从另一方面讲”这样的话，这就是利用信息的冗余便于大家理解。

2、讲东西要有一致性，不要补充有可能和主要思想相矛盾的例子，或者和想法无关的冗余信息。

3、在我们脑子存储信息时，要进行压缩，这样脑子才能记得...]]></description><category></category></item></channel></rss>