
算法
文章平均质量分 85
执假以为真
Learning, Coding, Writing
展开
-
关联分析算法中的常见概念及基本的Apriori算法介绍
在数据挖掘领域,有一种算法叫做关联分析算法。它是用来挖掘大量数据中哪些数据具有相关性以及相关性多大的一种算法。比如,哪些商品经常会被同时购买?一个经典的例子是:在有些商店,尿布和啤酒会被放在临近的位置售卖,因为它们经常会被一起购买。原因是年轻的爸爸下楼来买尿布的时候,顺手买了啤酒。关联分析算法中最基本的当属Apriori算法,更高效的则是FP-growth算法。它们都属于无监督机器学习。本文主要介绍关联分析算法中的一些基本概念以及基本的Apriori算法。原创 2024-09-17 22:06:15 · 1143 阅读 · 0 评论 -
一道有趣的题 -- 将分数转成小数
一道有趣的题 -- 将分数转成小数原创 2024-03-17 09:57:58 · 1158 阅读 · 1 评论 -
重写单链表的快速排序
继前几年写的单链表快速排序之后,今天重写单链表快速排序原创 2024-03-10 21:04:22 · 536 阅读 · 0 评论 -
简介Kadane算法及相关的普通动态规划
本文详细论述Kadane算法的经典题目,并通过“首先列出动态规划解法,再改为Kadane算法解法”的方式,讲解二者的不同。最后给出一道Kadane算法变体的题目,解法极为简洁优美。原创 2023-12-03 11:11:01 · 912 阅读 · 0 评论 -
计算24点与运算符重载
以面向对象和运算符重载来简化计算24点的代码原创 2023-02-11 13:13:37 · 873 阅读 · 0 评论 -
一文看懂P问题,NP问题,NPC问题
一文读懂P问题,NP问题,NPC问题,以及P=NP?问题,NP-Hard问题,NPC问题的证明等原创 2022-09-23 20:43:38 · 6750 阅读 · 0 评论 -
深度解析一道单词变换算法题
深度解析一道单词变换算法题,又名 WordLadder原创 2022-08-28 00:57:22 · 464 阅读 · 0 评论 -
全列举二叉搜索树 - 太祖长拳打飞一流高手
一套普通的太祖长拳,如何打飞江湖第一流的高手 - 论高层次递归原创 2022-03-13 11:52:08 · 1748 阅读 · 0 评论 -
单调栈(monotonic stack)揭秘
本文尝试揭秘单调栈的关键点。原创 2021-07-24 23:42:31 · 2608 阅读 · 3 评论 -
用动态规划解决单词变形
用动态规划解决单词变形原创 2021-06-27 21:34:54 · 397 阅读 · 1 评论 -
三道动态规划题
三道简单的动态规划题第一题有 m x n 个格子,机器人在最左上角的格子,星星在最右下角的格子。机器人只能向左和向下走。问:机器人拿到星星,总共有多少种拿法?如下图:思路:问题其实就是从左上角走到右下角,有多少种走法。如果倒过来看,站在右下角的角度,走到右下角,只有2种可能:一是从右下角格子的左边走来;二是从右下角格子的上方走来。所以,假设走到右下角格子的左边的格子有 x 种走法,走到右下角格子的上面的格子有 y 种走法,那么,走到星星的位置总共就是有 x + y 种走法。想到这里,原创 2021-02-15 19:08:17 · 268 阅读 · 0 评论 -
农心杯三国围棋擂台赛中轮空队的取胜概率
今年的农心杯三国围棋擂台赛进行地如火如荼。到目前为止,中日韩三队每队都只剩下了2个人。有人提出,三个队进行擂台赛时,首次轮空的那个队,其胜率有多高呢?假设任意2个棋手对弈,胜率均为50%.就这个问题,笔者写了一个小程序。算法是用递归做深度优先搜索;数据结构是用3个数字记录每队的剩余人数,另用一个变量记录当前对弈双方。具体程序如下:#include <iostream>using namespace std;enum RaceParty { AB = 0, AC,原创 2020-11-27 22:06:11 · 934 阅读 · 0 评论 -
实现正则中的通配符匹配及编程感想
实现正则中的通配符比较及编程总结很久以前,刚接触正则表达式的时候,惊讶于它有如此强大的匹配功能;也略微想了一下应该如何实现正则表达式的匹配功能,当时就觉得头大,连个星号的匹配也没想清楚,就放弃了。现在很偶尔地刷刷LeetCode上的题。这两天刚好碰到一个通配符问题:要求实现问号(?)和星号(*)通配符的功能。于是就仔细思考了一下,用了两三天的业余时间,最终把问题解决了。在回顾整个解决过程时,发现整个编程过程由一次基本实现和三次大改进构成。而这三次较大的改进都涉及到编程中一些重要、常用,却并不复杂的技巧,原创 2020-05-16 22:35:53 · 566 阅读 · 0 评论 -
C++大战Python - 以C++11重写欢乐斗地主残局解答器
业界传说Python平均一行代码能够顶的上几十行C/C++代码。业界还传说,C++效率能够达到Python的几十倍。对于以上二者,笔者本来感觉也许差不多只是略夸张。笔者曾经用C++和Python分别实现了不带cache的求Fibonacci数的函数,大约C++的效率确实可以达到Python效率的几十倍,不过代码量没有几十倍,只是略多。但这个毕竟是toy programming,如果是在一个真正实...原创 2019-05-12 20:08:11 · 2465 阅读 · 12 评论 -
最简单的动态规划题,木有之一
动态规划英文名为dynamic programming,其中pogramming指的是表格法,而非编写计算机程序。基本原理动态规划将问题分成若干个相互重叠的子问题,递归的求解子问题,保存子问题的解,再将它们的解组合起来,求出原问题的解。实际操作中,记录下子问题的结果,存储在一个表格中,使得公共的子问题只需要计算一次。最优子结构问题的最优解由相关子问题的最优解组合而成,一个问题的最优解包含其...原创 2018-12-22 20:29:02 · 920 阅读 · 0 评论 -
用程序实现在大文件中出现次数为Top N的数字
有一个问题:有一个很大的文件(如20GB),内存装不下,其中存了很多个数字(也可能是URL之类的),找出出现次数最多的3个数字。解题思路有这么3个点:1. Top N的问题自然是用最小堆来解。不过如果只是找Top 3而已,也不用构造堆那么麻烦,直接几行比较代码应该就可以了。2. 文件很大内存装不下,也就意味着不可能一次把文件整个读入内存再做处理。其实各个编程语言都有读大文件的方法,就是一...原创 2018-12-15 00:13:10 · 1589 阅读 · 0 评论 -
伪随机与实验
众所周知,计算机产生的是伪随机数。所谓伪随机,就是:当知道种子和随机产生算法之后,就可以完全确定出随机数序列了。并且这个随机数序列是循环重复的。不同的随机产生算法的循环周期不同;好的随机产生算法的循环周期会很长。有的文章提到,可以通过引入系统以外的变量来达到真随机的目的,比如“Unix 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音,来作为种子”。个人觉得,这本质上...原创 2018-11-24 01:04:56 · 1087 阅读 · 0 评论 -
递归与非递归寻找二叉树中2个节点的最低公共祖先节点
题目:给定一颗二叉树的根节点,以及二叉树中的2个节点的指针,求这2个节点的最低公共父节点。二叉树的存储形式中只有左右节点的指针。要求:分别用递归和非递归来做。注意事项:思考过程中,要想到的有一些特殊情况: 如果一个节点是另一个节点的父节点或祖宗节点,则最低公共父节点为空为该祖宗节点的父节点; 若该祖宗节点是根节点,则认为没有公共父节点。 当然,这一条具体如何规定,...原创 2018-07-27 22:35:20 · 2325 阅读 · 0 评论 -
单链表的快速排序与归并排序
本文经过2次更新,共介绍了单链表快速排序的2种方法以及单链表的归并排序原创 2018-07-27 22:30:44 · 8994 阅读 · 2 评论 -
快速排序的栈实现
快速排序,大家应该都很熟悉了。递归的实现,应该也很熟悉了。栈的实现,估计也有不少人尝试过。 但是本文试图将其讲得更加简单明了一些,试图起到一种一旦看过,就能理解的比较透彻,且不容易忘记的效果。另外,本文会给出栈实现的代码。快速排序的原理是分治,这个就不讲了,随便哪本书都有。但是讲例子,目的是知道以后编程的时候该如何写。 先举一个例子:int array[] = {10, 2, 50, 3,...原创 2018-07-27 22:29:58 · 3820 阅读 · 0 评论 -
高楼扔鸡蛋问题 - 动态规划+反推演绎
对于高楼扔鸡蛋问题,本文尝试反其道而行之:首先描述一个普适的高楼扔鸡蛋问题,然后利用动态规划法解决扔鸡蛋次数的问题,最后由获取次数的答案反推出扔鸡蛋的方法。这种由次数答案反推出方法的演绎方式令人有点震惊,似乎不同于常见的人类思考方式,有点像“先假设再证明”一样。感觉这个题目还有继续深挖的可能,比如找出数学上的证明或直接的扔鸡蛋方法。问题描述有M层楼和N个鸡蛋,要找到扔下鸡蛋而鸡蛋不碎的最低楼层(也...原创 2018-07-07 19:15:06 · 4459 阅读 · 0 评论 -
做一个微信欢乐斗地主之残局解答器!
今年过年的时候,在玩微信小程序之欢乐斗地主。发现里面还含有一个小游戏叫做“残局闯关”,如下图。这里面的题,如果不熟悉其中的套路,有个别几道还真的不好做(下文有例子)。于是,我便萌发了设计并实现一个残局解答器的想法。从过年期间就开始利用业余时间进行coding,到今天晚上,用了大约3周左右的业余时间,终于实现出了一个基本的残局解答器。目前UI也已经全部完成。可以轻松解题了!那么,如...原创 2018-03-13 23:57:26 · 14284 阅读 · 11 评论 -
用程序解答江苏网警的2018年刑侦科推理试题
今天在网上有一道题大火,据说是江苏网警提出来的2018年刑侦科推理题。链接见:https://news.sina.cn/2018-03-02/detail-ifyrzinh1654952.d.html?from=wap题目如下:这个题目怎么做呢?首先,确定是可以人工推导出来的。只是很麻烦,必须有足够的细心和耐心。笔者有同事就能推导出来。但是,笔者比较懒,想让计算机帮忙解决。怎么办呢?当然是编程解决...原创 2018-03-02 22:40:18 · 3063 阅读 · 0 评论 -
求平方根的面试题
一道关于开平方根的面试题原创 2016-12-30 21:48:46 · 1633 阅读 · 2 评论 -
谈谈一致性哈希
原文:https://blog.youkuaiyun.com/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一...转载 2016-12-09 22:31:38 · 1396 阅读 · 0 评论 -
Hash与Bloom Filter
先解释一下什么是哈希函数。哈希函数简单来说就是一种映射,它可取值的范围(定义域)通常很大,但值域相对较小。哈希函数所作的工作就是将一个很大定义域内的值映射到一个相对较小的值域内。传统的哈希存储假设要哈希的集合为S,它有n个元素。传统的哈希方法是,将哈希区域组织成h(h > n)个格子的列表,每一个格子都能存储S中的一个元素。存储时将S中的每一个元素映射到{0, 1, … , h-1}...转载 2016-08-26 00:05:31 · 576 阅读 · 0 评论 -
依赖链问题的解决方案
几个月前,看到这样一道题:有若干个任务,都是以数字来表示任务ID,任务之间有依赖关系,比如:1 而几个月后的前不久,工作中又遇到这样一个问题,有若干个library,互相之间有依赖关系,请设计并实现一个算法,以输出一个library的序列,使得它们可以被按此序列顺利加载。所以你看,其实这2个问题是同一个问题。那么怎么做呢?其实并不难,但其中有一个很关键的点。只要想透了这个点,一切就迎刃而解原创 2016-08-08 23:49:07 · 1071 阅读 · 0 评论 -
海盗分金币问题
今天晚上,有个同学出了道海盗分金币的问题来拷问我。我干脆用程序来把它做了。唉,好吧,承认概率已经退步了,而且还很不爱动脑筋。不过如果让计算机来处理这样的问题,不考虑算法复杂度的话,实在忒简单了。不考虑算法复杂度,几分钟就把程序写完跑通了。可是更高效的程序,和直接的概率解法是怎样的呢?下次请教这位大牛同学吧。原创 2016-06-10 00:05:03 · 2721 阅读 · 0 评论 -
丢手帕问题
从头思考去解决一个经典问题。原创 2016-03-19 23:09:57 · 720 阅读 · 0 评论 -
实现除法的程序
看到某公司2018的校招笔试题,手痒做了一下。非常简单,数分钟可以搞定。但是也要细心一点,因为也会有些小坑。题目大意是:写一个函数,实现除法,返回整数结果和余数,要求算法复杂度o(lgN).5分钟写完基本程序,即正数的除法。后来想起来还有负数和0的情况,又改了一下。也许程序还能再简洁点。def div(a, b): def _simple_div(a, b): # Here, bot...原创 2018-10-18 21:50:44 · 215 阅读 · 0 评论