分类
数据结构和算法

地图路由问题算法——Dijkstra算法

Dijkstra最短路径算法是图论中最经典的算法之一,这种算法广泛应用于地理信息系统(GIS),包括MapQuest和基于GPS的汽车导航系统。本文中将针对该问题,实现经典的Dijkstra最短路径算法,并对其进行优化。

分类
数据结构和算法

渗漏问题算法

给定由随机分布的绝缘材料和金属材料构成的组合系统:金属材料占多大比例才能使组合系统成为电导体?给定一个表面有水的多孔景观(或下面有油),水将在什么条件下能够通过底部排出(或油渗透到表面)?科学家们已经定义了一个称为渗透(percolation)的抽象过程来模拟这种情况。

分类
操作系统原理 数据结构和算法 程序设计

C语言基于MPI并行计算矩阵的乘法

矩阵的计算是并行计算里的一个很重要的问题。矩阵是一种网格化的数据,是一组同类型数值的集合,矩阵的出现,使得代数系统更完善,对各种实际问题的求解产生了巨大的作用。但是其庞大的计算量往往令人生畏,稍微大一点的矩阵,计算就变得非常繁琐,不仅仅是人,而且串行计算的程序,也同样会变得非常缓慢。这时我们就需要并行计算来解决这些问题了。

本文使用分治思想,利用主从节点方式,实现了一个并行计算的矩阵相乘程序,并将结果跟串行程序做了对比,计算了其加速比。

分类
数据结构和算法

几种排序算法的实现和性能比较

在各种各样的排序任务中,不同的算法有着不同的效果和性能,比如稳定性、时间开销、空间开销等。本文中实现了5种排序算法:
插入排序(Insertion Sort,IS)、
自顶向下归并排序(Top-down Mergesort,TDM)、
自底向上归并排序(Bottom-up Mergesort,BUM)、
随机快速排序(Random Quicksort,RQ)和
Dijktra 3路划分快速排序(Quicksortwith Dijkstra 3-way Partition,QD3P),
并且在同一台普通计算机上,针对不同输入规模的数据进行了测试,对比了上述排序算法的时间性能。

分类
数据结构和算法

组合数学实现关于购票问题的求解以及多种算法实现的性能比较

  】程序设计中有一类问题是购票问题,在整钱找零钱时怎样的队伍排列可以使得售票处不会出现找不开零钱的局面。本文将采用五种算法分析这道题目,并对各种算法的效率加以比较。从中可以看出组合数学理论在算法优化方面起到的显著作用。

分类
Python学习 操作系统原理 程序设计

使用C语言和Python基于MPI并行计算PI的值

圆周率PI是一个很神奇的数字,自古以来,包括数学家在内的很多人都曾使用过各种各样的算法去估算PI的真实值,并且都取得了一定的成就。古巴比伦人使用3.125作为PI的近似值,约公元前1700年的古埃及人则提出PI=3.1604,中国的祖冲之(430-501)则使用355/113作为近似值,使得PI值精确到了7位数。随着计算机的问世,以及科学技术发展的需要,PI的近似值目前精确位数早已突破万亿位。PI值除了有其每一位、每两位、每三位都符合均匀分布的统计规律特性之外,还可以用来检测计算机硬件的可靠性,而且,也可以用来入门并行计算。

分类
程序设计 综合技术

并行计算入门:mpich的安装与测试

在很多应用场景下,我们普遍需要进行并行计算,而不仅仅是并发。举个例子,比如机器学习中,我们常常使用GPU来并行训练神经网络;在例如Hadoop这种大数据计算平台等分布式系统中,不同的计算机之间,程序的执行也是并行的;同一台计算机中,多核处理器的不同CPU内核之间的计算也是并行的,系统可以此来均衡负载以及提高速度。那么,当我们有需要的时候,也可自己通过编写并行程序来进行计算,以实现我们所需要的功能,MPI就是这样的一个框架。

分类
操作系统原理 程序设计

进程间通信的五种方式原理及代码实现

在计算机系统中,进程之间有时需要进行数据的通信,但是不同进程之间的数据存储是相互隔离的,每一个进程只能访问自己占有的数据,这时候,我们就需要使用用于进程间通信的机制了。不过,除了套接字外,进程间通信的前提是两进程必须是父子进程关系,没有这种关系的进程间不能直接进行通信,而是需要利用其共同的父进程进行信息的中转。文本为计算机专业学生和从业者必学的基础知识。

进程间有以下几种通信机制:

分类
ASRT Python学习 智能语音技术 程序设计

Python读取wav格式文件

我们经常需要处理wav格式的文件,读取其中的声音信号和相关参数,来做一些事情。如果我们使用C++来做,那么需要对文件的底层存储格式有一个透彻的了解才行,而且考虑不周还有可能出Bug;如果使用MatLab来做,虽然只有一行代码就可以读取文件,但是MatLab语言自身的局限性使得写出的代码难以在实际中投入使用。因此,兼顾简介易用和实用性,用Python来做就显得比较好了。

分类
ASRT 机器学习及应用 程序设计

统计语言模型:从中文拼音到文本

前言:

自然语言是信息的载体,记录和传播着信息,信息论之父香农对信息的定义是“信息是用于消除随机不确定性的东西”。信息通过编码,经过一定的信道传输,然后传递到接收者,再解码成对应的可被人理解感知的东西,就完成了一次信息的传递。原始人的通信方式就是说话,而说话是先将信息编码为对应的语言信号,可以是文本,可以是声音,也可以就是中文拼音,然后接收者再将收到的信号进行解码。而我们人类对自然语言的处理经历了从基于规则的算法到基于统计的算法,显然基于统计的方法比规则更有效,下面我将介绍一种基于统计的语言模型,可以实现从拼音转为文本。