普里姆(Prim)算法

普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法。1、基本思想  对于图G4而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。      从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如...
阅读(348) 评论(0)

Sample K算法

最近去国内某牛叉互联网公司面试,出了一道算法题,看似简单,但是真正的答案十分巧妙。故此回忆并将原题以及解题思路记录下来,供大家学习: 随机的选取容量为N的数组中的k个元素,要求是不能重复选取,并且不能删除数组中的元素,只能够进行交换。 1. 解题思路                   今天就写到这,谁有好的解题方法请提出了共同学习。我这里明天继续……2. 贴上源码(Java)...
阅读(783) 评论(6)

复制带有random指针的单链表

如图1所示,有一条单链表,其节点除了有next指针外,还有一个random指针。random指针可指向单链表中的任意节点,包括它自身。random指针一旦指定,便不再更改。请设计算法,复制此单链表,并给出时间复杂度。图1 带有random指针的单链表解法1. 时间复杂度为O(n*n)先按next指针,将链表复制一份。使用p1指向原链表的头节点,p2指向p1指向的节点的random节点,p3指向p1的...
阅读(390) 评论(9)

跳跃表的原理及实现

1. 跳跃表的原理      学过数据结构的都知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。       如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的次数访问55呢?最直观的,当然是新开辟一条捷径去访问55。       如上图,我们要...
阅读(494) 评论(3)

算法面试题整理

1. 给出一个正整数,将该整数分解成质因数相乘的形式,例如n=56,它的质因数相乘的结果是:2*2*2*7。#include using namespace std; int main() { int n; cin >> n; while (n > 1) { int i; for (i = 2; i < n; i++) {...
阅读(435) 评论(7)

算法

本文版权归原作者、译者所有,我只是转贴;如果侵害到您的权益,请联系我,我将删除本文。 基本上,这文章可以说是最佳A*算法文档。极力推荐! Amit's A star Page中译文   译序 这篇文章很适合A*算法的初学者,可惜网上没找到翻译版的。本着好东西不敢独享的想法,也为了锻炼一下英文,本人译了这篇文章。 由于本人英文水平非常有限,六级考了两次加一块不超过370分,因此本译文难免...
阅读(975) 评论(3)
    我的公众号

    关注微信公众号,专

    为机器学习入门者
    个人资料
    • 访问:145012次
    • 积分:3307
    • 等级:
    • 排名:第10702名
    • 原创:83篇
    • 转载:6篇
    • 译文:4篇
    • 评论:761条
    博客专栏
    最新评论