<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Kang_TJU的博客]]></title><description><![CDATA[潮平两岸阔，风正一帆悬]]></description><link>https://blog.youkuaiyun.com/Kang_TJU</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Kang_TJU]]></copyright><item><title><![CDATA[【推荐系统实践】读书笔记-第1章]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/84854778</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/84854778</guid><author>Kang_TJU</author><pubDate>Thu, 06 Dec 2018 15:04:23 +0800</pubDate><description><![CDATA[本文按照书中的目录进行内容组织，对于个人认为比较重要的点，进行提炼梳理，方便自己加深印象。同时，也想借助的文章的分享出来，可供小伙伴们一同学习进步，也非常欢迎大佬拍砖指正。
什么是推荐系统

基本任务


关联用户和信息。一方面帮助用户发现对自己有价值的信息，一方面让信息展现在他感兴趣的用户面前。从而解决信息过载的问题。


和分类目录以及搜索引擎的区别


分类目录：类似国内hao123这样的网...]]></description><category></category></item><item><title><![CDATA[Accelerated-c++-置换索引]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78698483</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78698483</guid><author>Kang_TJU</author><pubDate>Sat, 02 Dec 2017 21:33:06 +0800</pubDate><description><![CDATA[问题第五章练习题5-1. 
设计和实现一个程序以产生一个置换索引。 
在一个置换索引当中，每个短语都是以这个短语的每一个单词作为索引的（类似倒排，内容做索引）。因此，假如有如下的输入：
  The quick brown fox 
  jumped over the fence 
  得到如下的输出： 
  The quick \t brown fox 
  jumped over the \t f]]></description><category></category></item><item><title><![CDATA[linux系统编程-一个demo]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78664394</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78664394</guid><author>Kang_TJU</author><pubDate>Wed, 29 Nov 2017 13:41:55 +0800</pubDate><description><![CDATA[本目展示一个linux环境下系统编程的一个demo。主要是为了讲解项目下文件夹的布局以及makefile的写法。 
程序的源代码来自于书籍《Accelerated c++》一书当中第四章的例子。布局一个基本的项目主要是以下5项构成：
src：存放项目的源文件。目录可以细分。
inc：存放项目的头文件。目录可以细分；
bin：存放二进制可执行文件。
Makefile：Makefile文件
run.sh]]></description><category></category></item><item><title><![CDATA[python可视化-matplotlib学习2]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78549994</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78549994</guid><author>Kang_TJU</author><pubDate>Thu, 16 Nov 2017 13:09:54 +0800</pubDate><description><![CDATA[本目承接该系列上一目，总结更多的我用到的的画图技巧。柱状图(横向)import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as nplabel = ['a', 'b', 'c', 'd', 'e', 'f']
x = sorted([1234, 221, 765, 124, 2312, 890])idx = np.]]></description><category></category></item><item><title><![CDATA[作业部落markdown-demo]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78434551</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78434551</guid><author>Kang_TJU</author><pubDate>Fri, 03 Nov 2017 13:22:27 +0800</pubDate><description><![CDATA[欢迎使用 Cmd Markdown 编辑阅读器我们理解您需要更便捷更高效的工具记录思想，整理笔记、知识，并将其中承载的价值传播给他人，Cmd Markdown 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown：
  
  整理知识，学习笔记
  发布日记，杂文，所见所想
  撰写发布技术文稿（代码支持）
  撰写发布学术论文（LaTeX 公式支]]></description><category></category></item><item><title><![CDATA[leetcode-75-sort colors]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78395209</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78395209</guid><author>Kang_TJU</author><pubDate>Mon, 30 Oct 2017 17:29:12 +0800</pubDate><description><![CDATA[问题题目：[leetcode-75-sort colors]思路以下思路参考[算法系列之十一荷兰国旗问题]
  我们可以把数组分成三部分，前部（全部是0），中部（全部是1）和后部（全部是2）三个部分，每一个元素（红白蓝分别对应0、1、2）必属于其中之一。
  
  将前部和后部各排在数组的前边和后边，中部自然就排好了。
  
  设置两个指针begin指向前部的末尾的下一个元素（刚开始默认前部无0，]]></description><category></category></item><item><title><![CDATA[leetcode-96-Unique Binary Search Trees]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78347945</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78347945</guid><author>Kang_TJU</author><pubDate>Wed, 25 Oct 2017 22:58:21 +0800</pubDate><description><![CDATA[问题题目：[leetcode-96]思路catalan数。至于怎么分析的，参考自己的lintcode刷题里对这个题的解释。基本方法是固定根节点之后，剩下的N-1个节点，依次在左右两支展开。代码class Solution {
public:
    int numTrees(int n) {
        return catalan(n);
    }
private:
    int cata]]></description><category></category></item><item><title><![CDATA[leetcode-698-Partition to K Equal Sum Subsets]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78335096</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78335096</guid><author>Kang_TJU</author><pubDate>Tue, 24 Oct 2017 21:37:07 +0800</pubDate><description><![CDATA[问题题目：[leetcode-698]思路能想到的是搜索的思路，但是不知道怎么用。 
参考了[698. Partition to K Equal Sum Subsets]看了别人的代码，知道这个题搜索的技巧在于，对于每一个元素nums[i]，枚举每一个子数组的当前位置。这也是一种枚举策略。并且，这个题目只有这么理解枚举，才能做出来。代码(wa)下面枚举的思路没有错，就是这个思路。但是TLE。clas]]></description><category></category></item><item><title><![CDATA[leetcode-416-Partition Equal Subset Sum]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78334185</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78334185</guid><author>Kang_TJU</author><pubDate>Tue, 24 Oct 2017 20:27:02 +0800</pubDate><description><![CDATA[问题题目：[leetcode-416]思路先求和，如果不能被2整除。肯定不能二等分。 
对于[1,3]来说，虽然和可以被二等分，但是显然的是，数组并不能二等分。 
所以，问题转化为是否存在一个子数组，他的和为sum/2。 
当然，这个题可以枚举所有的子数组，判断，只要有一个就可以。 
还有一个办法是背包，将数组放入容量为sum/2的背包中，如果可以被二等分。那么背包的最大价值一定是sum/2。否则，]]></description><category></category></item><item><title><![CDATA[leetcode-18-4Sum]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78138120</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78138120</guid><author>Kang_TJU</author><pubDate>Fri, 29 Sep 2017 23:00:58 +0800</pubDate><description><![CDATA[问题题目：[leetcode-18]思路这个题还是和之前一样，多了一层循环。 
排序之后的夹逼！ 
但是，要注意，夹逼在相等的情况下，i,j都要移动的。这点不要忘了。代码class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        int sz = nums.size]]></description><category></category></item><item><title><![CDATA[leetcode-16-3Sum Closest]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78138054</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78138054</guid><author>Kang_TJU</author><pubDate>Fri, 29 Sep 2017 22:46:44 +0800</pubDate><description><![CDATA[问题题目：[leetcode-16]思路注意，夹逼的思路一定要注意，必须要排序！！！否则，就是错的。 
夹逼其实也相当于某种程度的遍历，但是它的技巧性很强。关键就是在排序，最近收获的这个方法非常赞啊！引入一个new_diff保留最小差值即可。代码class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target]]></description><category></category></item><item><title><![CDATA[leetcode-15-3sum]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78125437</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78125437</guid><author>Kang_TJU</author><pubDate>Thu, 28 Sep 2017 16:45:51 +0800</pubDate><description><![CDATA[问题题目：[leetcode-15]思路我之间用dfs做的。 
但是，这次看到新的方法。算是两根指针夹逼的做法。 
相等时的情形，处理比较重要。避免了o(n^3)。如果，i,j不动。就不行。代码class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector< vector<in]]></description><category></category></item><item><title><![CDATA[leetcode-480-Sliding Window Median]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78086439</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78086439</guid><author>Kang_TJU</author><pubDate>Mon, 25 Sep 2017 16:18:04 +0800</pubDate><description><![CDATA[问题题目：[leetcode-480]思路参考：[C++ two multiset solution] 
代码思路非常的清晰。 
不能继续使用priority_queue的原因是，删除操作不方便。 
所以，改用multiset，优点是，插入删除都很块，并且有序。这样可以维护前半部分和后半部分，其实map也可以实现这个功能。他们都不需要随机访问，但是map不能存重复元素。代码]]></description><category></category></item><item><title><![CDATA[leetcode-295-Find Median from Data Stream]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78085431</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78085431</guid><author>Kang_TJU</author><pubDate>Mon, 25 Sep 2017 15:09:26 +0800</pubDate><description><![CDATA[问题题目：[leetcode-295]思路基本思路就是将前半部分元素维护在大根堆当中。 
后半部分元素维护在小根堆当中。但是要注意的是，大根堆和小根堆可以维护各自的有序性。但是，这两个部分的有序性需要在每次插入的时候特别判断以下。 
每次，都进行维护。这样就不会出现某一次插入需要弹出很多元素的情形。代码class MedianFinder {
public:
    /** initialize y]]></description><category></category></item><item><title><![CDATA[leetcode-4-Median of Two Sorted Arrays]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78084747</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78084747</guid><author>Kang_TJU</author><pubDate>Mon, 25 Sep 2017 14:30:26 +0800</pubDate><description><![CDATA[问题题目：[leetcode-4-Median of Two Sorted Arrays]思路这个题目还是比较困哪的。 
说一下基本的思路，这个题求两个有序数组的中位数。那么，我们给出一个更一般的办法，即求出两个有序数组的第k位数。 
大致的思路是这样，各自考虑A[k/2-1]与B[k/2-1]。如果是朴素的[1,3,5],[2,4,6]这样的情形，那么各自[k/2-1]元素构成了有序数组合并之后的]]></description><category></category></item><item><title><![CDATA[linux系统编程-epoll]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78081193</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78081193</guid><author>Kang_TJU</author><pubDate>Mon, 25 Sep 2017 00:17:56 +0800</pubDate><description><![CDATA[本文对epoll的注意点做一个小结。接口epoll常见的接口有三个：1.创建epoll的实例，在内核中初始化相应的数据结构// 创建epoll instance
// linux 2.6.8之后，size参数没有实际意义。但是，需要比0大
int epoll_create(int size);2.向epoll instance注册，修改，删除相应的fd及其事件。这点有别于select，后者每次监听的]]></description><category></category></item><item><title><![CDATA[leveldb-expand文档]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78079259</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78079259</guid><author>Kang_TJU</author><pubDate>Sun, 24 Sep 2017 20:18:25 +0800</pubDate><description><![CDATA[leveldb-expand文档
作者：kang
邮箱：likang@tju.edu.cn
项目地址：[]
功能一（前缀匹配）1.接口设计virtual Status GetByPrefix( const ReadOptions& options,
                            const Slice& key,
                            in]]></description><category></category></item><item><title><![CDATA[leetcode-153-Find Minimum in Rotated Sorted Array]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78078264</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78078264</guid><author>Kang_TJU</author><pubDate>Sun, 24 Sep 2017 17:49:43 +0800</pubDate><description><![CDATA[问题题目：[leetcode-153]思路如果没有旋转，直接返回。 
如果，旋转，二分的思路。和之前方法一样，注意hign和low的更新方法。最后返回二者相邻是边界条件。 
因为最小值肯定不存在有序区间当中。只能在非有序区间中寻找。代码class Solution {
public:
    int findMin(vector<int>& nums) {
        int low = 0,]]></description><category></category></item><item><title><![CDATA[vector实现]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78027368</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78027368</guid><author>Kang_TJU</author><pubDate>Tue, 19 Sep 2017 10:43:37 +0800</pubDate><description><![CDATA[给出的实现，参照accelerated c++一书当中的内容。总结有几个点说一下啊： 
1.注意三个指针的语义，data,avail,limit。增加limit之后，注意，修改avail的用法,尤其是迭代器那一块。 
2.rule of three原则。 
3.allocator的用法，allocate,deallocate,construct,destroy的用法，以及为什么要自己管理。我们只是使]]></description><category></category></item><item><title><![CDATA[leveldb-expand接口设计V2]]></title><link>https://blog.youkuaiyun.com/Kang_TJU/article/details/78024625</link><guid>https://blog.youkuaiyun.com/Kang_TJU/article/details/78024625</guid><author>Kang_TJU</author><pubDate>Mon, 18 Sep 2017 22:28:04 +0800</pubDate><description><![CDATA[leveldb-expand接口设计项目地址：https://github.com/google/leveldb接口设计
类型定义
//　记录类型
typedef std::pair<std::string, std::string> RecordType; 
前缀匹配：
virtual Status GetByPrefix( const Slice& prefix,]]></description><category></category></item></channel></rss>