算法
文章平均质量分 70
学者(cloudea)
写前后端就图一乐 算法才是生活
展开
-
Java大数正整数加法和乘法
每一位的计算都应考虑进位。原创 2023-03-11 21:28:38 · 148 阅读 · 0 评论 -
堆排序(简单版和通行版本)
通行版:初始时是一个不符合定义的堆,从最后一个非叶结点开始调整堆。计算量比简单版少一半。简单版:使用暴力建堆,初始为空堆,每个元素依次加入堆中。原创 2022-10-15 20:33:58 · 164 阅读 · 0 评论 -
树选择排序的实现(python)
本文使用python对树选择排序算法进行了原理介绍和实现。树选择排序是一种非常容易实现和易于理解的算法。关键是它的时间复杂度还是最优的。转载 2022-09-27 11:38:16 · 276 阅读 · 0 评论 -
基于CRC64的通用哈希表(HashMap)的实现(使用golang)
本文就现有哈希博文的两个典型问题进行解决,首先是使用泛型来支持任意类型,然后使用CRC64散列函数将任意二进制数据散列到64位整数再对数组长度取模。由于CRC64具有良好的散列性质,因此实现的哈希表不容易出现冲突。原创 2022-09-16 15:01:43 · 2037 阅读 · 0 评论 -
快速排序与归并排序的链式实现(golang)
基于链表的排序算法鲜有人提及,本文使用golang实现了基于链表的快速排序算法和归并排序算法。结果表明,本文的实现不仅高效,且相比数组的实现方式更易于理解、实现。原创 2022-09-13 15:30:11 · 804 阅读 · 0 评论 -
一种基于堆的链式优先队列实现(使用golang)
传统的堆使用的是数组实现方式。众所周知数组是定长的,因此给堆的实际使用带来了限制与不便。本文使用基于链式的实现方式。原创 2022-09-10 22:12:12 · 303 阅读 · 0 评论 -
一种旅行商问题(TSP)具有高近似比的启发式解法的python实现
简介文本实现了一个自研的TSP问题近似解法。在规模5~100的问题上近似比在1.1左右。另外在规模为1000的一个测试用例上测得近似比为:1.0742784198679693。时间复杂度O(n^3)。基本思想:基于最近邻的思想,每次选择一个最近且加入后不会产生边交叉的顶点。但是有可能不存在这样的顶点。所以当不存在时,选择最近的顶点,且把该顶点加入后,去除边交叉。直到所有顶点都被选择为止。注意:这里的边交叉是指:路径中存在一条子路径,可以通过翻转该子路径后使得原路径变短。如下图。实验结果本文对原创 2022-02-19 15:05:00 · 618 阅读 · 0 评论 -
使用pyconcorde计算二维平面的旅行商问题(TSP)
简介众所周知,TSP问题是一个NP问题,至今只能通过近似的方法来求解。即使使用分支限界方法等非近似算法算得依然很慢。比较好的近似算法有:Lin–Kernighan 在100以内几乎可以得到最优解,速度很快,时间复杂度O(n2.2)O(n^{2.2})O(n2.2)Christofides 理论最坏情况可以达到1.5倍的近似比,时间复杂度O(n3)O(n^3)O(n3)但是代码...原创 2022-02-18 10:13:18 · 2979 阅读 · 10 评论 -
词法分析总结
词法分析词法分析是对自然语言进行较浅层次处理的过程。中文分词英文有空格可以将单词分开。但是中文都是连续的字串,因此将中文切分成词,面临着困难。主要有:交集型歧义:例如 下雨天地面积水。可以分成下雨天/地面/积水。也可以分成下雨/天地/面积/水。组合型歧义:例如门把手弄坏了。可以分成 门/把/手/弄/坏/了。或门/把手/弄/坏/了。在分词实践中,会出现词典或样本数据中没有出现过的新词,这些词称为集外词。分词错误中 98.33%由集外词导致。而由歧义导致的只占1.67%。因此在中文自动分词中能原创 2021-10-29 23:12:42 · 1554 阅读 · 0 评论 -
图卷积网络原理及其基于paddlepaddle的实现
图卷积网络这里的图是指Graph,一种数据结构。图卷积网络关键问题在于如何定义在图上的卷积操作。目前有两种方法:谱方法空间方法已经证明,谱方法是空间方法的一种特例。本文将简要介绍目前关于图卷积操作的基本方法,以其基于paddlepaddle平台实现了其中一种称为GCN的图卷积网络。由于图像可以视为一种特殊的Graph。因此图卷积网络也可以处理图像的数据。将实现后的网络用于MNIST数据集做图的分类,实验结果表明,图卷积网络具有很强的表达能力。谱方法对于一个图G=(V,E,W)G=(V,E,原创 2021-10-23 21:07:56 · 577 阅读 · 0 评论 -
语言模型总结
语言模型概述语言模型是一个用于判断句子出现概率的数学模型。假设我们有一个句子s=(w1,w2,...,wm)s=(w_1,w_2,...,w_m)s=(w1,w2,...,wm)。其中wiw_iwi为句子中的第i个词语。根据古典概型,那么语言模型可表示为:P(s)=人类说过的所有句子中s的个数人类说过的所有句子个数P(s) = \frac{人类说过的所有句子中s的个数}{人类说过的所有句子个数}P(s)=人类说过的所有句子个数人类说过的所有句子中s的个数统计语言模型显然,上述语言模型公原创 2021-10-16 16:17:59 · 1087 阅读 · 0 评论 -
受限玻尔兹曼机的python参考实现
简介众所周知,玻尔兹曼机好是好,但是太复杂了,所以在实际应用中不会使用。而受限玻尔兹曼机(Restricted Boltzmann machine, RBM)是它的一个带约束的版本,因此模型变得更加简单。受限玻尔兹曼机是一种生成式的机器学习模型,能够学习样本的概率分布。根据学到的概率分布,可生成符合分布的样本。例如可以用它学习人脸图片的概率分布,然后用它学到的概率分布来生成一张这个世界不存在的人脸。总而言之,RBM是通过输入数据集学习概率分布的随机生成神经网络。它把网络中的节点分为两层:可见层隐藏原创 2021-10-09 15:51:36 · 2075 阅读 · 1 评论 -
三句话,完成英文语料的词频统计
简介有时候有必要对一个英文语料进行统计,以便发现其中的规律。例如,统计词频从而知道哪些词使用得比较频繁。本文实现了三个函数完成英文语料的统计功能,重点研究在什么条件下能够使语料中90%单词能被人读懂。数据集本文使用MASC数据集,下载地址:https://www.anc.org/data/masc/该数据集是一个开放的社区资源,从更大的语料集Open American National Corpus (OANC)上抽取而成, 由500,000多个单词组成。统计代码代码由js写成。对数据集中的每一原创 2021-09-13 23:15:29 · 857 阅读 · 0 评论 -
Json解析器的设计与实现
简介本文设计并实现了一个简化版的json解析器。可解析json中的对象、数组和字符串。同时解析器还可把对象编码成json的格式。实现采用C++语言。需要前置知识:编译原理文法根据旧版json的文法规则,可反推出如下上下文无关文法,并使用EBNF表示:其中 \uxxxx 表示除了 \ 和 " 以外的字符<json> -> <object> | <array> | <string><object> -> '{'原创 2021-09-10 13:32:36 · 1027 阅读 · 0 评论 -
js实现快速排序和归并排序
引言突发奇想使用js来实现这两个经典的排序算法。由于JavaScript高度方便的数据结构,因此相比C版本的代码,此版本更加容易理解!快速排序/** 快速排序(函数思想) * @param {Object} list 要排序的列表 * @return {Array} 已经排序的数组 */function quikSort(list){ if(! (list instanceof Array)){ throw (new Error("错误的列表")); } if(list.len原创 2021-04-30 21:23:58 · 241 阅读 · 1 评论 -
关于K折交叉验证的解释
查看了其它用户的博文,发现还是傻傻不明白。但是自己参考了深度学习相关书籍,里面解释得非常清析:看来,还是得多读书。原创 2020-11-07 11:55:04 · 681 阅读 · 0 评论 -
一种简单的使用pandas DataFrame划分训练集、测试集、验证集的方法
例如划分训练集、测试集、验证集比例为 6:2:26: 2: 26:2:2, 代码如下:import pandas as pd""" 此脚本将数据集分为训练集和测试集和验证集"""if __name__ == "__main__": data = pd.read_csv("corpus-model-filtered.csv", header=None) #加载数据 data:pd.DataFrame = data.sample(frac=1.0)原创 2020-10-29 12:59:32 · 6048 阅读 · 2 评论 -
全连接的神经网络Java实现
content goes here原创 2020-08-11 08:38:49 · 465 阅读 · 0 评论 -
感知器的实现
本篇实现了一个最简单的感知器,能够将下图中的两类数据分开。原理我们假设有一个超平面可以将两类数据分开:wTx=0w^Tx=0wTx=0其中,wT=[w0 w1 w2 ... wn]w^T=[w_0 \ w_1 \ w_2 \ ... \ w_n]wT=[w0 w1 w2 ... wn]是系数,xT=[1 x1 x2 ... xn]x^T=[1 \ x_1 \ x_2原创 2020-06-27 13:56:52 · 857 阅读 · 0 评论 -
KNN改进版:KNNPlus——基于质心的快速分类
如果有一个未知类别的样本s,其属性向量为x,一般的KNN使用的是与该向量最近的k个样本作为判断其类别的依据。也就是说,在最近的k个样本中,哪种类别数量最多,该未知样本就被判定为那个类别。这个过程涉及到了求距离和排序两个操作。如果有1亿个样本,就要求1亿个距离,然后对这1亿个跨度进行排序。显然数量大了,算法运行效率就低了。基于此,这篇文章提出了一种全新的思路(可能别人已经想出来了),利用样本质心...原创 2020-05-04 23:39:58 · 1214 阅读 · 3 评论 -
RobustScaler的计算方法/原理
scikit-learn中RobustScaler的计算方法如下:其中viv_ivi表示样本的某个值。medianmedianmedian是样本的中位数,IQRIQRIQR是样本的 四分位距原创 2020-04-30 22:21:07 · 8462 阅读 · 1 评论 -
线性同余法随机数生成
线性同余法xn=(axn−1+b) mod mx_n =(ax_{n-1}+b) \, mod \, mxn=(axn−1+b)modm/* * Random.h * * Created on: 2020年2月11日 * Author: Administrator */#ifndef RANDOM_H_#define RANDOM_H_class Ra...原创 2020-02-23 10:02:05 · 2153 阅读 · 0 评论 -
蒙特卡罗法判断素数(质数)
问题重述:给定一个正整数n ( >= 3), 判断是不是素数。思路介绍使用蒙特卡罗法算法结合费尔马小定理结合二次探测定理。费尔马小定理:如果p是素数,则有 ap−1 mod p=1a^{p-1} \; mod \; p = 1ap−1modp=1, a∈[2,p−1]a\in[2,p-1]a∈[2,p−1]二次探测定理:如果p是素数,则方程x2 mod p=1x^2 \;...原创 2020-02-15 19:26:45 · 1836 阅读 · 2 评论 -
拉斯维加斯法解n皇后问题
问题提出问题如下:有一个n×nn\times nn×n的棋盘,要求在上面放置n个皇后,这些皇后之间不能在一条直线或斜线上(45度),求一个符合要求的放置方案。算法简介拉斯维加斯算法随机产生一个解,但是这个解不一定符合题设要求(即拉斯维加斯算法可能找不到问题的解)。例如n皇后问题中,随机产生的摆放位置可能符合“n个皇后相互不在一条直线或斜线上”这一规则,也可能不符合。因此,可以通过循环调用此算...原创 2020-02-14 19:35:55 · 3208 阅读 · 0 评论 -
随机数法求解非线性方程组的解
求下列方程组的解:x2+y2−8=0x^2 + y^2 - 8= 0x2+y2−8=0x−y=0x - y = 0x−y=0运行结果:可见与真实解(x = 2, y = 2)已经十分接近。思路:构造目标函数 L=(x2+y2−8)2+(x−y)2L=(x^2 + y^2 - 8)^2 + (x - y)^2L=(x2+y2−8)2+(x−y)2, 显然当 L=0L = 0L=0时...原创 2020-02-11 14:02:50 · 1076 阅读 · 0 评论 -
旅行商问题
如果有n个城市,假设每两个城市之间都有通路,且距离已知。现在商人在其中一个城市,想出发经过所有其它城市并回到原地,请求出一条最短路径。下面对如上问题的一个具体实例进行求解:n = 4, 商人在A城市为了表示方便,A、B、C、D分别用 0、1、2、3代替。运行结果如下:(答案 0 2 1 3 0 也对)可以使用基于优先队列的分支限界法解决此问题代码如下:#include <...原创 2020-02-10 15:06:42 · 800 阅读 · 0 评论 -
最大装载问题
如果有一艘船,载重量为mmm,有nnn个货物重量为 w1,w2,......,wnw_1, w_2, ...... ,w_nw1,w2,......,wn请问这艘船最大可以承载多少重量的货物,请给出一个最优的装载方案。下面用一个具体例子解决此问题。令 m = 60, n = 7, w = [10,20,30,50,50,70,40]运行结果:0表示不装,1表示装代码如下:#i...原创 2020-02-08 20:15:01 · 686 阅读 · 0 评论 -
基于分支限界算法的Dijkstra算法
有如下有向图:要求计算源点a到目的点k的最短距离。运行结果:可以使用 分支限界法 解决。代码如下:#include <iostream>#define MAX_V 100using namespace std;class Node{public: int index; //顶点编号 int dist; //到源点的长度 Node* next; //链...原创 2020-02-08 14:37:13 · 640 阅读 · 0 评论 -
谈谈大O表示法
如何称量一个算法的复杂度?算法复杂度分为 时间复杂度 和 空间复杂度 。时间复杂度是指执行一个算法需要的时间。空间复杂度是指执行一个算法所需要的内存空间。但是空间复杂度的计算简单而且如今内存已经不如以前那么宝贵,因此我们平时所说的算法复杂度都是指的时间复杂度。以下所说的算法复杂度也是指 时间复杂度 。何谓时间复杂度?时间复杂度描述算法执行的时间。可不同机器运算速度不一样,如何统一衡量一个算法...原创 2020-02-07 00:05:24 · 939 阅读 · 0 评论 -
图的m着色问题
给定一个n顶点的无向图,每一个顶点涂一种颜色,最多有m种颜色。 要求相邻顶点涂不同的颜色。问有多少种涂色方案?如下实例,如果用至多4种颜色去涂它,有多少种方案?可以用回溯法解决此问题。每个顶点可能有4种涂色方案,共有5个顶点,因此解空间总共有 454^545种可能,除掉不符合要求的,最终结果如下:代码如下:#include <iostream>#define MAX_V ...原创 2020-02-04 20:44:40 · 653 阅读 · 0 评论 -
KNN实践
算法简介K最邻近算法(KNN), 原理如下:计算未知样本与已有样本的 距离 , 取最近的k个, 这k个样本中,哪个种类最多,就认为未知样本是哪个种类。十分简单。这里的 距离 可以是欧式距离、绝对值距离, …实践根据iris数据集,使用数据前两个特征对花种类进行分类。数据长这样:0,1,2,3列是花的属性,4列是花的种类,一共150条数据。本例中,只取0,1两列作为分类的依据。运行...原创 2020-02-04 11:37:31 · 202 阅读 · 0 评论 -
模拟退火算法原理及实现
原理模拟退火是寻找最优解的一种算法。算法描述如下:它包含两层循环,外层代表着温度的逐渐降低,内层代表在同一温度下的迭代次数。每次迭代都会产生一个随机的解,如果这个解更优,则接受,否则按照一定 概率 接收。这个 概率 由 e−∣△f∣te^{- \frac{|△f|} {t}}e−t∣△f∣ 决定,随着温度降低,这个 概率会越来越小。例子下面演示使用此方法求解函数 z = (x...原创 2020-02-01 14:54:07 · 2270 阅读 · 1 评论 -
符号三角问题
问题描述:如下三角形:+ + - + - + + + - &nb...原创 2020-01-31 14:11:32 · 422 阅读 · 0 评论 -
算法-01背包
背包最大容量10,有以下5个商品及其价值,试求背包所能容纳的最大价值。序号12345重量22654价值63546运行结果如下:代码如下:#include <iostream>#include <cmath>#define MAX_V 100using namespace std;struct Go...原创 2020-02-09 11:54:11 · 304 阅读 · 0 评论 -
决策树实践
对iris数据集进行分类,数据长这样:0,1,2,3列表示特征,4 列表示花所属的类别只取0,1两列作为分类的依据。分类结果如下:代码如下:import numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltimport pandas as pdimport timeclass Tree: ...原创 2020-01-26 10:07:04 · 138 阅读 · 0 评论 -
遗传算法简单实现
import numpy as npimport matplotlib.pyplot as pltimport timep1 = 0.8 #交叉概率p2 = 0.1 #变异概率#评价并选择函数def choose(C): row, col = C.shape individuals = [] for i in range(col): ind...原创 2020-01-23 22:40:45 · 450 阅读 · 0 评论 -
矩阵连乘问题
由于矩阵乘法运算满足结合率,如果有矩阵A、B、C、D连续相乘,那么 A(BCD) = (AB)(CD) = … 。所以可以找到一个好的加括号顺序使得计算量减少。可以使用动态规划问题解决。动态规划解题步骤:1, 找到最优子结构即子问题最优可以令父问题也达到最优。本例中,若想(ABCDEFG)*(HIJKLMN)计算步骤最少,那么ABCDEFG加括号方式一定是最优的,同理HIJKLMN加括号也...原创 2020-01-21 15:51:08 · 688 阅读 · 0 评论 -
使用最长公共子序列计算文本相似度
这里一个比较合理的思路。如果最长公共子序列长为k, 文本1长为n1, 文本2长为n2,则相似度为 (2 * k) / (n1 + n2)结果如下:代码如下:#include <iostream>#include <string>#include <windows.h>#include <algorithm>#include <...原创 2020-01-18 12:17:38 · 1174 阅读 · 0 评论 -
找出平面上两个点的最近距离-nlogn
给定一组二维平面上的点,要求找出其中最近的两个点,并输出这两个点距离。如图,最近的两个点显然是D和E。程序结果:代码如下:#include <iostream>#include <string>#include <windows.h>#include <algorithm>#include <cmath>#inclu...原创 2020-01-16 22:04:32 · 1809 阅读 · 0 评论 -
两种常见排序算法--归并排序和快速排序的实现
实现快速排序只要11行代码哦~无他,唯手熟尔#include <iostream>#include <string>#include <windows.h>using namespace std;//归并排序void sort(int* nums, int start, int end){ int mid = (start + end) / ...原创 2020-01-16 15:39:24 · 273 阅读 · 0 评论