数据结构与算法
文章平均质量分 69
ChanKamShing
这个作者很懒,什么都没留下…
展开
-
Java实现,手写二叉树
一、基本概念二叉树:每个节点最多有两个子树的结构; 满二叉树:除了最后一层没有任何节点外,每一层的所有节点都有两个子节点的二叉树; 完全二叉树:结构与满二叉树类似,不同点在于最后一层可以不满,但最后一层的节点必须连续集中再最左边; 二叉搜索树:各节点的值有大小要求的二叉树,左节点的值<中节点的值<右节点的值。二、树的存储方式1、数组形式 使用数组存储,...原创 2019-12-20 12:14:37 · 833 阅读 · 0 评论 -
高效查找素数
素数:一个数如果只能被1和它本身整除,那么这个数就是素数第一版:思路:遍历[2,n)每个数,判断每个数是否是素数,判断素数的思路是一次将该数被从2到num-1整除,如果其中某个数可以整除,直接返回false,说明不是素数,如果返回true,说明是素数,所以count+=1./** * 统计[2,n)之间有多少个素数 * @param n * @retur...原创 2019-10-14 18:05:21 · 244 阅读 · 0 评论 -
Java实现双向链表
本篇介绍Java实现双向链表的peak(获取第一个节点对象)、removeFirst(删除第一个节点)、find(查找指定节点)、insertLast(从尾部插入节点)等方法。一、创建节点类package linkedList; /** * 节点类 * 数据有id、nextNode * nextNode用于指向下一个节点对象 */public class L...原创 2019-10-09 23:40:55 · 172 阅读 · 0 评论 -
Java实现单向链表
本篇介绍Java实现单向链表的peak(获取第一个节点对象)、removeFirst(删除第一个节点)、find(查找指定节点)、remove(移除链表中指定节点对象)等方法。一、创建节点类package linkedList;/** * 节点类 * 数据有id、nextNode * nextNode用于指向下一个节点对象 */public class Li...原创 2019-10-09 00:31:57 · 196 阅读 · 0 评论 -
回归算法
一、概念 回归分析利用样本(已知数据),产生拟合方程(根本作用),从而对未知数据进行预测。 如果用自变量x和因变量y表示他们两者的关系,可以表示为:,为关系方程的参数,此外,还受到噪声(误差)的影响: 如,一组随机变量,和另一组随机变量,那么研究和之间的关系的统计方法,就叫作回归分析。假设和只是一个单一的映射关系,那么又可以称之为一元回...原创 2019-09-21 22:59:46 · 635 阅读 · 0 评论 -
LR与Sigmod函数
在使用LR时,经常用Sigmod函数来表示一个概率,为什么LR可以使用Sigmod函数呢? 首先,LR的假设只有一个,就是两个类别的特征服从均值不等、方差相等的高斯分布。为什么假设它服从高斯分布?一方面,高斯分布容易理解;另一方面,从信息论的角度看,当均值和方差已知时,高斯分布是熵最大的分布。当熵分布最大时,可以平摊风险。就如二分查找法,每次都将中间作为查找点,目...原创 2019-09-21 22:10:47 · 250 阅读 · 0 评论 -
决策树的构建
(项目地址:https://github.com/ChanKamShing/decisionTree.git)一、概念 决策树可分为两类:回归决策树和分类决策树。回归决策树:对连续变量构建决策树; 分类决策树:对离散变量构建决策树。1、信息增益 决策树必须涉及到一个概念,就是信息增益。信息增益又基于信息熵的知识(可参考里面关于信息熵的部分内容:htt...原创 2019-09-20 13:26:39 · 1603 阅读 · 0 评论 -
K最近邻算法
一、原理 K最近邻算法(K-Nearest Neighbor, KNN)是最基本的分类算法,其基本原理是:从最近的K个邻居(样本)中,选择出现次数最多的类别作为判定类别。K最近邻算法可以理解为是一个分类算法,常用于标签的预测,如性别。实现KNN算法核心的一般思路:相似度计算——计算未知样本和每个训练样本的距离; 排序——按照距离的递增关系排序; 统计标签——得到距离最...原创 2019-09-18 18:36:08 · 2705 阅读 · 0 评论 -
相似度计算
相似度计算在数据挖掘和推荐系统中有着广泛的应用场景。例如:CF协同过滤算法中,可以利用相似度计算用户之间(User-Based)或者物品之间(Item-Based)的相似度; 在利用k-means进行聚类时,判断个体所属类别,可以使用相似度计算公式计算个体到簇类中心的距离; 利用KNN进行分类时,也可以利用相似度计算个体与已知类别之间的相似性,判断个体所属的类别;1、欧式距离 ...原创 2019-09-18 13:13:54 · 643 阅读 · 0 评论 -
数据标准化与Python实现
一、原理 数据标准化(Normalization):将数据按照一定比例进行缩放,使其落入到一个特定的小区间。数据标准化的类别:Min-Max标准化 Z-Score标准化(Standard Score,标准分数) 小数定标(Decimal scaling)标准化 均值归一化 向量归一化 指数转换1、Min-Max标准化 Min-Max标准化,指...原创 2019-09-17 00:20:44 · 1781 阅读 · 0 评论 -
朴素贝叶斯
直接转自来源:(https://blog.csdn.net/zxm1306192988/article/details/78483764) 本文从NLP切入口(朴素贝叶斯)讲解NLP技术,讲解潜序渐进,通俗易懂,有兴趣的同学可以点击链接进去学习学习。...转载 2019-07-29 12:01:39 · 99 阅读 · 0 评论 -
从一串数字里删除k个数字,使得新的那串数字最小
最近接触一道有趣的算法题,意思是:给定一串数字,这串数字有可能大于long的最长长度,譬如12542670021,从这串数字中删除k个数字,使得新数字串在所有可能性结果中最小,那么应该删除哪k个数字呢? 下面给出思路和代码,以及代码的优化。 当然,数字的大小高位影响最大,所以首先考虑的是最高为,即从最左边开始。1 2 5 4...原创 2018-11-28 20:04:51 · 2430 阅读 · 0 评论 -
冒泡算法排序及其优化方案
一、什么是冒泡排序?冒泡排序(Bubble Sort)是一种最为基础的交换排序,相信学过C语言的,都接触过这种排序算法。这篇文章重点应该放在优化上面。二、冒泡排序的实现思想:将数组里面相邻的元素两两比较,根据大小来交换元素位置,举个栗子:这里有一个数组array[4, 6, 5, 8, 9, 3, 2, 1, 7],首先4和6比较,4小于6,位置不变,接下来6和5比较,6大...原创 2018-07-31 22:22:10 · 158 阅读 · 0 评论 -
鸡尾酒算法实现冒泡排序的优化
上一篇介绍了冒泡算法及其优化方案,但其优化是从每轮的比较次数上优化,而“鸡尾酒算法”可以从轮次上优化。一、什么时鸡尾酒排序?鸡尾酒排序又称为快乐小时排序,它基于冒泡排序进行的优化方案。二、鸡尾酒算法思想冒泡排序是元素单向比较,而鸡尾酒排序却是双向。列举一个最简单的栗子array[2, 3, 4, 5, 6, 7, 8, 9, 1],如果按照传统的冒泡排序进行操作,第一轮...原创 2018-08-01 19:55:09 · 263 阅读 · 1 评论 -
计数排序与稳定排序
我们常用的排序算法,有冒泡算法、快速算法等,它们都是基于元素之间的比较来进行排序,有一种特殊的算法不是基于元素比较,而是利用数组下标来确定元素在数组的位置,这种算法就是“计数排序”。 先来说一下实现的原理,假设有20个随机整数的数组array,他们值分别是:9,3,5,4,9,1,2,7,8,1,3,6,5,3,4,0,10,9,7,9.有没有发现这些整数的大小都...原创 2018-10-11 22:55:22 · 1175 阅读 · 3 评论