<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wonner_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wonner_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wonner_]]></copyright><item><title><![CDATA[leetcode树总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103575512</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103575512</guid><author>wonner_</author><pubDate>Sun, 15 Mar 2020 20:38:16 +0800</pubDate><description><![CDATA[面试中对树的考察多为二叉树、二叉查找树等。常见的二叉树操作有：

前序遍历、中序遍历、后续遍历（递归、迭代）
94.二叉树的中序遍历

中序遍历定义：先左子树，后根节点，再右子树。首先给出简单的递归解法。


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     Tre...]]></description><category></category></item><item><title><![CDATA[面试常用排序算法+LeetCode排序算法应用]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103459889</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103459889</guid><author>wonner_</author><pubDate>Sun, 15 Mar 2020 10:55:59 +0800</pubDate><description><![CDATA[排序算法也是面试中常常提及的内容，问的最多的应该是快速排序、堆排序、归并排序。这些排序算法很基础，很可能知道其思想，但在写代码时细节上出错。因此本文的书写主要参考了十大经典排序算法动画与解析，看我就够了！（配代码完全版），对基于比较的排序算法：冒泡排序、插入排序、选择排序以及归并排序、快速排序和堆排序重新自己实现了一遍。上文中给出的算法动画有助于排序算法的理解。以下算法全部基于数组原地排序。


...]]></description><category></category></item><item><title><![CDATA[[leetcode]买卖股票的最佳时机]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/104747164</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/104747164</guid><author>wonner_</author><pubDate>Mon, 09 Mar 2020 13:45:33 +0800</pubDate><description><![CDATA[121.买卖股票的最佳时机

给定一个数组，它的第i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易（即买入和卖出一支股票），设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 =...]]></description><category></category></item><item><title><![CDATA[leetcode单调栈总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/104632094</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/104632094</guid><author>wonner_</author><pubDate>Wed, 04 Mar 2020 10:49:20 +0800</pubDate><description><![CDATA[单调栈是在栈的先进后出基础之上额外添加一个特性：从栈顶到栈底的元素是严格递增（or递减）。动画：什么是单调栈？一文很直观的解释了单调栈并给出了单调递减栈的一个例子，但是上文中误写为单调递增栈。当遇到的问题，和前后元素之间的大小关系有关系时可以考虑使用单调栈。如单调递增栈可以找到左起第一个比当前数字小的元素，单调递减栈可以找到左起第一个比当前数字大的元素。

以单调递减栈为例，每当我们遇到一个比当前...]]></description><category></category></item><item><title><![CDATA[[leetcode][dfs]深度优先搜索算法总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/104578019</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/104578019</guid><author>wonner_</author><pubDate>Tue, 03 Mar 2020 11:36:45 +0800</pubDate><description><![CDATA[dfs算法通常使用递归实现，逻辑清晰。在递归开头写一个跳出条件，然后继续向下递归遍历即可。要用一个额外的空间记录节点访问情况，遍历过的地方不再遍历，防止陷入循环，或者在原空间上进行修改。下面给出图上的dfs算法实现，与树有关的算法在树的博客中单独总结。

200.岛屿数量

给定一个由'1'（陆地）和 '0'（水）组成的的二维网格，计算岛屿的数量。一个岛被水包围，并且它是通过水平方向或垂直方向上...]]></description><category></category></item><item><title><![CDATA[leetcode拓扑排序算法总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/104590394</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/104590394</guid><author>wonner_</author><pubDate>Mon, 02 Mar 2020 16:55:08 +0800</pubDate><description><![CDATA[在图论中，拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。所以可以通过有向图是否存在拓扑排序来确定该有向图是否有环。计算有向图拓扑排序的常见算法如下：

从 DAG 图中选择一个 没有前驱（即入度为0）的顶点并输出。
	从图中删除该顶点和所有以它为起点的有向边。
	重复 1 和 2 直到当前的 DAG...]]></description><category></category></item><item><title><![CDATA[[leetcode][DP] 动态规划总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/104496842</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/104496842</guid><author>wonner_</author><pubDate>Fri, 28 Feb 2020 21:06:41 +0800</pubDate><description><![CDATA[当优化问题可分为多个子问题，子问题相互关联，子问题的解被重复使用时，考虑使用动态规划求解。

 使用动态规划的条件包括以下两点

优化子结构：问题的和优化解包含子问题优化解，通过求解子问题使得我们可以自上而下的完成求解过程。
	重叠子问题：在问题的求解过程中，很多子问题的解将被多次使用。通常将子问题优化解代价保存下来，逐步构造最优解。
 求解动态规划问题，最最重要的是找到递归表达式
...]]></description><category></category></item><item><title><![CDATA[面试中的字符串算法]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103653430</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103653430</guid><author>wonner_</author><pubDate>Tue, 25 Feb 2020 11:54:14 +0800</pubDate><description><![CDATA[本文提到的题目部分来自《程序员算法面试指南》一书，这本书的题目可以在牛客网进行在线编程练习。部分来自LeetCode。

KMP算法

提到字符串问题，首先想到的就是KMP算法，它用于解决字符串匹配问题，在字符串str(长度为N)中查找子串match(长度为M)出现的位置。暴力的解法是从左到右遍历str的每一个字符，将当前字符作为第一个字符是否与match匹配。若与match匹配到一半发现不匹配了...]]></description><category></category></item><item><title><![CDATA[使用cohen kappa系数衡量分类精度]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103542799</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103542799</guid><author>wonner_</author><pubDate>Mon, 16 Dec 2019 16:02:34 +0800</pubDate><description><![CDATA[在诊断试验中，研究者希望考察不同诊断方法在诊断结果上是否具有一致性。如评价两个医务工作者对同一组病人的诊断结论的一致性、同一医务工作者对同一组病人前后进行两次观察作出诊断的一致性。1960年Cohen等提出用Kappa值作为评价判断的一致性程度的指标。实践证明，它是一个描述诊断的一致性较为理想的指标，因此在临床试验中得到广泛的应用。下文给出的例子也都是基于医疗诊断的，可见其提出背景。除此之外，ka...]]></description><category></category></item><item><title><![CDATA[贝叶斯优化原理及应用[附XGBoost、LightGBM超参数调优代码][scikit-optimize]]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103511168</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103511168</guid><author>wonner_</author><pubDate>Sat, 14 Dec 2019 15:35:56 +0800</pubDate><description><![CDATA[近年来机器学习和深度学习算法被越来越广泛的应用于解决对未知数据的预测问题。由于超参数的选择对模型最终的效果可能有极大的影响，为了使模型达到更好的效果，通常会面临超参数调优问题。但如何选择合适的超参数并没有一个明确的指导，并且同一模型面对随时间变化的数据，其超参数的选择都可能需要随着数据变化进行调节，更何况是原本就分布不同的两份数据。因此，人工指定超参数通常是根据经验或随机的方法进行尝试，深度学习里...]]></description><category></category></item><item><title><![CDATA[竞赛常用集成学习框架Boosting算法总结(XGBoost、LightGBM)(附代码)]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103130113</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103130113</guid><author>wonner_</author><pubDate>Wed, 11 Dec 2019 11:24:17 +0800</pubDate><description><![CDATA[Boosting类算法简介

Boosting是一类可将弱学习器提升为强学习器的算法，这类算法的工作机制如下：先从初始训练集训练出一个基学习器，再根据基学习器的表现对训练样本分布进行调整，使得先前基学习器做错的训练样本在后续受到更多关注，然后基于调整后的样本分布来训练下一个基学习器；重复进行这一操作，最终将各个基学习器得到的结果加权结合。常见的Boosting算法包括GBDT、XGBoost和Li...]]></description><category></category></item><item><title><![CDATA[leetcode二分查找算法总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/103339259</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/103339259</guid><author>wonner_</author><pubDate>Tue, 03 Dec 2019 21:50:52 +0800</pubDate><description><![CDATA[二分查找(binary search)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始，如果中间元素正好是要查找的元素，则搜索过程结束；如果某一特定元素大于或者小于中间元素，则在数组大于或小于中间元素的那一半中查找，而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空，则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。二分查找算法在情况下的复杂度是对数时间，进...]]></description><category></category></item><item><title><![CDATA[解决ubuntu安装python-igraph时出现的Could not download and compile the C core of igraph问题]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/88773677</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/88773677</guid><author>wonner_</author><pubDate>Sun, 24 Mar 2019 10:02:39 +0800</pubDate><description><![CDATA[pip install python-igraph

  在使用pip安装igraph时遇到了Could not download and compile the C core of igraph，在网上查阅并尝试了多种解决方法，很多都失败了，但其实只需要很简单的一步就可以成功安装igraph了，下面记录一下我踩的坑

缺少编译igraph所需要的库，下载libigraph0-dev即可 ...]]></description><category></category></item><item><title><![CDATA[使用spark mllib协同过滤进行图书推荐（Java版）]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/87918954</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/87918954</guid><author>wonner_</author><pubDate>Tue, 26 Feb 2019 14:59:30 +0800</pubDate><description><![CDATA[0. 协同过滤算法简介

    协同过滤（Collaborative Filtering），简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。根据关注内容的不同，协同过滤算法分为三类：

以用户为基础（User-based）的协同过滤：用相似统计的方法得到具有相似爱好或者兴趣的相邻用户，使用与推荐用户相似用户的感兴趣的项目进行推荐。

以项目为基础（Item-based）...]]></description><category></category></item><item><title><![CDATA[Scala快速学习教程（二）]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/81871737</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/81871737</guid><author>wonner_</author><pubDate>Tue, 21 Aug 2018 12:41:27 +0800</pubDate><description><![CDATA[    上一篇文章写到了Scala基础知识及控制结构，这篇文章来介绍一下Scala中的数据结构。

定长数组（Array）与变长数组（ArrayBuffer）

定长数组声明有两种形式：

声明指定长度的数组 val 数组名= new Array[类型](数组长度)

val intValueArr = new Array[Int](3)  //声明一个长度为3的整型数组，每个数组元素初始化为0
...]]></description><category></category></item><item><title><![CDATA[Scala快速学习教程（一）]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/81866080</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/81866080</guid><author>wonner_</author><pubDate>Mon, 20 Aug 2018 14:43:25 +0800</pubDate><description><![CDATA[    在学习spark时使用到了scala语言进行编程，特编写此博客，已尽量精简的方式对scala语言进行总结学习（在至少会一门编程语言的基础上看此篇博客会比较容易）。Scala运行于Java平台（JVM，Java 虚拟机）上，并兼容现有的Java程序，Scala代码可以调用Java方法，访问Java字段，继承Java类和实现Java接口。scala与java有许多相似之处，建议进行对比学习。本...]]></description><category></category></item><item><title><![CDATA[基于欧式距离的海量高维向量相似度计算方法综述及局部敏感哈希 Cross-polytope LSH 简介]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/80985727</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/80985727</guid><author>wonner_</author><pubDate>Fri, 13 Jul 2018 12:07:51 +0800</pubDate><description><![CDATA[    在做海量高维向量相似度快速计算比赛时，对最近邻搜索方法做了一些泛读和总结。主要以下分为几大类。    一是基于树形的高维索引，如kd-tree，R-tree等，但当维度较高时，查询性能急剧下降。    二是基于map-reduce方法，选择合适个数的中心点，相当于一个聚类操作，将一个中心点定义为一个cell。使用多个计算节点将查找集和被查找集同时映射到距离最近的中心点，也就是对应的cell...]]></description><category></category></item><item><title><![CDATA[[leetcode]堆排序 求前k大的数]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/80290975</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/80290975</guid><author>wonner_</author><pubDate>Fri, 13 Jul 2018 11:20:17 +0800</pubDate><description><![CDATA[前一篇博客中写到了排序算法，其中包含一个堆排序，因此本篇博客讲解堆这个数据结构及其应用。关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及，此处不再赘述。下面讲解一个堆的重要应用，求n个数中前k个大的数，一般思路是将n个数排序，取前k个数，但当n的数量庞大无法加载到内存时，需要另外一种思路，即利用堆，只维护k个树的大小而不需维护全部。具体的思路是：先建一个k个数的小堆，然后从k+1个数往后的值...]]></description><category></category></item><item><title><![CDATA[通俗易懂的傅里叶变换讲解（多图预警）]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/80446547</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/80446547</guid><author>wonner_</author><pubDate>Fri, 25 May 2018 09:14:09 +0800</pubDate><description><![CDATA[这学期学习图像处理时遇到了傅里叶变换，他的名字早就耳熟能详，但从来没有搞懂其中真正的含义，因为没有系统的学过复变函数。借此机会学习，在网上找到了一篇通俗易懂的博客，其中没有许多公式解读，读后对傅里叶变化会有一个大致的了解。想要真正的理解其中奥义，还需再次从公式入手。原文出处： 韩昊   12345678910作者：韩 昊知 乎：Heinrich微博：@花生油工人知乎专栏：与时间无关的故事 谨以此文...]]></description><category></category></item><item><title><![CDATA[leetcode回溯算法（backtracking）总结]]></title><link>https://blog.youkuaiyun.com/wonner_/article/details/80373871</link><guid>https://blog.youkuaiyun.com/wonner_/article/details/80373871</guid><author>wonner_</author><pubDate>Sun, 20 May 2018 13:16:21 +0800</pubDate><description><![CDATA[回溯算法的定义：回溯算法也叫试探法，它是一种系统地搜索问题的解的方法。回溯算法的基本思想是：从一条路往前走，能进则进，不能进则退回来，换一条路再试。回溯算法实际上一个类似枚举的搜索尝试过程，主要是在搜索尝试过程中寻找问题的解，当发现已不满足求解条件时，就“回溯”返回，尝试别的路径。回溯法是一种选优搜索法，按选优条件向前搜索，以达到目标。但当探索到某一步时，发现原先选择并不优或达不到目标，就退回一步...]]></description><category></category></item></channel></rss>