<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Immorwave]]></title><description><![CDATA[所谓热情也好、天赋也罢，请用结果说话]]></description><link>https://blog.youkuaiyun.com/Immorwave</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Immorwave]]></copyright><item><title><![CDATA[散列表——理论]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77996078</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77996078</guid><author>Immorwave</author><pubDate>Sat, 16 Sep 2017 15:35:40 +0800</pubDate><description><![CDATA[参考本书，第一遍看完对证明以及一些结论完全是一脸懵逼，于是又参考了《算法导论》,自己整理了一下知识：(对比两本书，明白两点，一、看英文定义才是王道； 二、没有那个智商就不要有那么强的求知欲)
散列表( hash table):

特点：·



·不需要序的信息（这也是个缺点啊）；
·对输入数据是否有序持怀疑，数组可代替AVL树；




·实际存储的关键字数组比全部的可]]></description><category></category></item><item><title><![CDATA[二叉查找树——懒惰删除]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77944761</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77944761</guid><author>Immorwave</author><pubDate>Tue, 12 Sep 2017 14:26:02 +0800</pubDate><description><![CDATA[由于学习树这一章节，查阅了很多资料，网上书上代码上，自己的别人的已然分不开了，如有侵权请留言，如同意我记录于此，也请留言区留下大名，必然感谢！
此篇参考 ----》》》传送门

懒惰删除(lazy deletion)：
当一个元素要被删除时，它仍然留在树中，而是只作了个被删除的标记。


·这特别是在有重复项时很流行，因为此时记录出现频率数的域可以减1；
·如果树中的实际节点数和“]]></description><category></category></item><item><title><![CDATA[半可视化打印二叉树]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77938389</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77938389</guid><author>Immorwave</author><pubDate>Mon, 11 Sep 2017 21:49:22 +0800</pubDate><description><![CDATA[由于学习树这一章节，查阅了很多资料，网上书上代码上，自己的别人的已然分不开了，如有侵权请留言，如同意我记录于此，也请留言区留下大名，必然感谢！


大致了解了二叉树，那么总是那样 各种顺序的输出，我看着不舒服，也不直观，于是在网上找到了如下代码，
该算法 
从上至下，打印右子树，根节点，左子树
函数outputTree(BinaryNode * t, bool left, const]]></description><category></category></item><item><title><![CDATA[倒序打印单链表]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77826446</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77826446</guid><author>Immorwave</author><pubDate>Sun, 03 Sep 2017 22:08:11 +0800</pubDate><description><![CDATA[书中有一问题：
编写倒序打印单链表的算法，只是用常数的附加空间。本题意味着，不能使用递归但可以假设该算法是表的一个成员函数。
通读题目，可以知道题目告诉我们，用递归可以完成；或者借助附加空间，那么借助栈可以完成；借助常数的附加空间，那么就需要一个固定的大小去完成，给他三个指针，去反转链表吧。
ps：实验结果基于之前自己实现的 简易List (是双链表且含有初始化data=0的头尾节点，不过不]]></description><category></category></item><item><title><![CDATA[后缀转中缀]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77803762</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77803762</guid><author>Immorwave</author><pubDate>Sat, 02 Sep 2017 21:04:01 +0800</pubDate><description><![CDATA[兄弟篇 中缀转后缀 + 后缀计算




后缀转中缀：

 eg:
   652 3+8*+3+*   >>> 6*((5+(2+3)*8)+3)



实现：




·读入表达式，若是数字压入栈；

·若是运算符，则弹出栈顶的两个元素a、b进行 b operator a，后再压入栈中即可；

·循环至最后，返回栈顶元素，即为所需要的后缀表达式。

]]></description><category></category></item><item><title><![CDATA[约瑟夫问题（Josephus problem）]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77800427</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77800427</guid><author>Immorwave</author><pubDate>Sat, 02 Sep 2017 12:21:49 +0800</pubDate><description><![CDATA[问题概述：
非原装正版问题，但是道理还是那个道理
N个人编号1~N，围坐成一个圆圈。从1号人开始传递一个热土豆，经过M次传递后那这热土豆的人被清除离座，由坐在后面的人拿起热土豆继续进行游戏。最后剩下的人获胜。
ex： M=0,N=5 清除顺序：1->2->3->4->5   ;   M=1,N=5 清除顺序：2->4->1->5->3;
注意的是：这个问题描述和网上的部分问题描述不一致，在]]></description><category></category></item><item><title><![CDATA[栈应用——中缀转后缀+后缀计算]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77184865</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77184865</guid><author>Immorwave</author><pubDate>Tue, 15 Aug 2017 12:18:53 +0800</pubDate><description><![CDATA[中缀表达式（infix expression）即  平时生活中大家对于算式的书写格式
( eg: 6*((5+(2+3)*8)+3)  );
后缀表达式（post expression）即  把数字和运算符分开，把运算符的优先级运算内涵到后缀式的数字和运算符的                                                               顺序中(故]]></description><category></category></item><item><title><![CDATA[栈应用——平衡符号]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77184075</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77184075</guid><author>Immorwave</author><pubDate>Tue, 15 Aug 2017 10:41:40 +0800</pubDate><description><![CDATA[平衡符号用于编译器检查程序的语法错误，每一个右括号( }、]、）)必然对应其相应的左括号(eg:
 [()] 合法；[(])不合法)


算法描述：

·做一个空栈，读入字符直到文件尾；
·如果字符是一个左括号则将其压入栈，
 如果字符是一个右括号：如此时栈空，报错；否则，弹出栈顶元素，若与相应的左括号不匹配，报错；
·到文件尾，栈非空则报错；



算法分析：

时]]></description><category></category></item><item><title><![CDATA[简易List]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77150538</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77150538</guid><author>Immorwave</author><pubDate>Sun, 13 Aug 2017 21:47:31 +0800</pubDate><description><![CDATA[表——Vector实现  ：
不易被索引、插入、删除代价低( 已知位置，否则劣在于查找
 )、查找低效；



这次实现过程错误百出，最后收获满满：
·对于嵌套类Node、iterator、const_iterator就在List类内实现吧；
·类内的函数实现顺序有时候会让编译器提示出List的对象并没有这个功能，但是运行还是可以的，坑死人啊；
·讨论一下*this,以下是我的理]]></description><category></category></item><item><title><![CDATA[简易Vector]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77150340</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77150340</guid><author>Immorwave</author><pubDate>Sun, 13 Aug 2017 21:29:11 +0800</pubDate><description><![CDATA[表——Vector实现  ：
O(1)索引、插入、删除代价高O(N) ( 最后位置除外O(1) )、查找低效；
Vector需要内存指针(Object *)和大小(theSize);
(注：大小不同于容量，size)



个人根据书中的框架实现,注意到如下问题：
·需要在单参数构造函数Vector(int initSize=0){}中对于初始大小的元素，初始化为0:
for (]]></description><category></category></item><item><title><![CDATA[求幂]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77063183</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77063183</guid><author>Immorwave</author><pubDate>Thu, 10 Aug 2017 17:24:09 +0800</pubDate><description><![CDATA[对于求幂，文中给了递归算法，后面题中让给出非递归算法；


其实实质就是：
——基本情况 n==0，返回1;
——如果幂为偶数，那么可以由pow(x,2)得来；
——如果幂为奇数，那么可以由pow(x,2)*x得来。


递归方法：非常直观，但要注意不要追求那些没用的花哨，刻意的变形还导致了无限循环


//递归求幂
//O(logN)
int pow(int x, int n)
{
	i]]></description><category></category></item><item><title><![CDATA[素数]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77058697</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77058697</guid><author>Immorwave</author><pubDate>Thu, 10 Aug 2017 16:26:38 +0800</pubDate><description><![CDATA[关于素数已经是老生常谈，但对于新手的我来说就是新的体验，可能所写不及大牛的十万分之一


素数(质数)：除了1和它本身以外不再有其他因数，这样的数称为素数。


先来素数的判断：(
时间复杂度是O(√N),书中说这个是最坏的... )
//判断一个数是否是素数
void primeNumber(int n)
{
	if (n <= 1)
	{
		cout << "no" << endl]]></description><category></category></item><item><title><![CDATA[最大相连子序列和及相应的下标]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77054083</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77054083</guid><author>Immorwave</author><pubDate>Thu, 10 Aug 2017 16:09:15 +0800</pubDate><description><![CDATA[关于最大子序列和问题，以前已经解决    点击打开链接
但是并没有给出具体序列的那些相应的下标，为此，这次作为补充。


我的想法是：
记录所求序列的索引，如果thisSum 开始下标begin
；从thisSum>maxSum能得出
结束下标end，最后从存储可能的开始下标数组中 找到end的最后一次更新的begin即可。



代码如下：

{优快云:CODE:25]]></description><category></category></item><item><title><![CDATA[折半查找零点]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77053443</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77053443</guid><author>Immorwave</author><pubDate>Thu, 10 Aug 2017 15:51:59 +0800</pubDate><description><![CDATA[本是书后习题 ，难度不大，但在实现时对于语法有值得借鉴的地方，就记录下来：


题目：对某个任意的函数f找出方程f(X)=0的一个解，该函数连续的并有两个点low、high使得f(low)和f(high)符号相反，那么在low和high之间即存在一个零点；


需要注意的如下：

——满足给定的low、high使得f(low)*f(high)
——用一个函数作为参数传递我们需要不]]></description><category></category></item><item><title><![CDATA[最大公因数(gcd)]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77046749</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77046749</guid><author>Immorwave</author><pubDate>Thu, 10 Aug 2017 12:52:48 +0800</pubDate><description><![CDATA[对于最大公因数(gcd)，书中给出两种算法，欧几里得算法和不断递归调用的求解方法：


欧几里得算法，其实现原理就是辗转相除法，证明略，实现如下：



//m>=n
int gcd(int m,int n)
{
    while(n!=0){
        int rem = m % n;
        m = n;
        n = rem;
    }
    return m;]]></description><category></category></item><item><title><![CDATA[N个正整数随机排列]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/77046288</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/77046288</guid><author>Immorwave</author><pubDate>Thu, 10 Aug 2017 12:22:49 +0800</pubDate><description><![CDATA[这次我们要生成前N个正整数的一个随机排列
书中给出三种算法如下：


前提：需要一个随机数生成函数randInt(begin，end)，生成从begin 到 end 的随机数






算法一： 
依次填入a[0]到a[n-1]的数组a,每次都不断调用随机数函数，直到生成的随机不同于已经生成的a[0],a[1],...a[i-1]，然]]></description><category></category></item><item><title><![CDATA[最大序列和问题]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/75091253</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/75091253</guid><author>Immorwave</author><pubDate>Thu, 13 Jul 2017 19:39:39 +0800</pubDate><description><![CDATA[最大子序列和的问题:就是给出一组数据，求出里面那几个前后连续的数的和最大。
书中给出4个算法，时间复杂度从O(N^3)降到O(N^2)再降到O(NlogN)最后到O(N)，这就是人家跑完程序都走上人生巅峰了，你面对一组数据苍颜白发却还在等待结果...



//O(N^3)
int maxSubSum1(const vector & a)
{
	int maxSum = 0;
	for (]]></description><category></category></item><item><title><![CDATA[算法分析(Algorithm Analysis)]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/75091219</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/75091219</guid><author>Immorwave</author><pubDate>Thu, 13 Jul 2017 19:33:26 +0800</pubDate><description><![CDATA[看了不同的算法才感觉人与人之间的差距怎么就那么大，不哔哔了(白天已吐槽无数次)
今天主要的就是：基础的时间复杂度和自己的一些探索


时间复杂度：存在c,n0，N>=n0时
T(N)
T(N)>=cg(N)    T(N)=Ω(f(N)) 2      1&&2 T(N)=Θ(f(N))
T(N)



相关法则：
1、T1(N)+T2(N) = O(f(N) +g(N))]]></description><category></category></item><item><title><![CDATA[basic C++ knowledge prepared for data structure （2）]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/75091199</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/75091199</guid><author>Immorwave</author><pubDate>Thu, 13 Jul 2017 19:28:11 +0800</pubDate><description><![CDATA[看完第一章，很多用过的东西看见了别人家的用法，很多不知所以然的东西有了看似恍然大悟却又朦朦胧胧
1、
函数对象 以及巧妙地重载 operator () 来实现一切的调用更像函数调用
函数对象(function object),一种考虑到一个对象可以既包含数据又包含成员函数，那么当定义一个没有数据而只有一个函数的类，然后传递该类的一个实例，就可以实现把函数作为参数传递了，只不过是放入一个对象之]]></description><category></category></item><item><title><![CDATA[basic C++ knowledge prepared for data structure （1）]]></title><link>https://blog.youkuaiyun.com/Immorwave/article/details/75090456</link><guid>https://blog.youkuaiyun.com/Immorwave/article/details/75090456</guid><author>Immorwave</author><pubDate>Thu, 13 Jul 2017 19:22:02 +0800</pubDate><description><![CDATA[从今天开始，开始刷数据结构

书《数据结构与算法分析——C++语言描述（第四版）》


当数据成员含有指针时，默认操作很可能就会不起作用（如指针由某个对象成员函数定址的时候），自己写五大函数，实现深拷贝






//五大函数
class IntCell
{
public:
	explicit IntCell(int initialValue = 0) { p = new int{ in]]></description><category></category></item></channel></rss>