1.自我介绍 2.算法原理: 简历上所有算法原理。 工资不高,面完秒挂。 (面试官不是很专业,有点不偏好数分的来搞算法)
记录一下阿里的流程 一面电话面40分钟: 先自我介绍 1.问项目 2.开放题:有若干个策略,怎么对用户使用这些策略使得收益最大 面完笔试 二面电话面40min: 全程通电话,面试官发了个链接,给我出题做 1.推对偶 2.vrptw建模 3.2的基础上加上兼容点和不兼容点约束 4.使用过的算法遇到的困难和解决方法。 三面电话面30min: 自我介绍 1.问竞赛做的东西,有想过怎么改进 2.聊人生、职
25道选择+3道编程 选择包括linux系统题,C++题和一些从没见过的算法题,上来第一道就是从没见过的什么什么圆算法。。。 编程题全都很难,这在leetcode里是不是都得算hard啊?最后一题停车场直接全输出(-1,-1)竟然40%通过。。。 真的好难。。。沉默了。。。。。
附近地点搜索 题目详情 找一个点集中与给定点距离最近的点,同时,给定的二维点集都是固定的,查询可能有很多次,时间复杂度O(n)无法接受,请设计数据结构和相应的算法。 分析与解法 此题是去年微软的三面题,类似于一朋友@陈利人出的这题:附近地点搜索,就是搜索用户附近有哪些地点。随着GPS和带有GPS功能的移动设备的普及,附近地点搜索也变得炙手可热。在庞大的地理数据库中搜索地点,索引是很重要的。但是,我
sift算法的编译与实现 代码:Rob Hess维护的sift 库。 环境:windows xp+vc6.0。 条件:opencv1.0、gsl-1.8.exe 昨日,下载了Rob Hess的sift库,将其源码粗略的看了看,想要编译时,遇到了不少问题,先修改了下代码,然后下载opencv、gsl。最后,几经周折,才最终编译成功。 以下便是sift源码库编译后的效果图: 为了给有兴趣实现sift算
快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。 特别是python能用一句话实现快速排序。 思路说明 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解
贪心算法 建议观看MIT算法导论-贪心算法中的课程。
洗牌算法 洗牌算法,顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。 如果元素存在于数组中,即可将每次 random 到的元素 与 最后一个元素进行交换,然后 count—,即可。 这相当于把这个元素删除,代码如下: #include <iostream> #include <ctime> using namespace std; const int maxn = 10; int a[m
排序算法的评价 稳定性 稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串行中R出现在S之前,在排序过的串行中R也将会是在S之前。 计算复杂度(最差、平均、和最好表现) 依据串行(list)的大小(n),一般而言,好的表现是O(nlogn),且坏的行为是O(n2)。对于一个排序理想的表现是O(n)。仅使用一个
单链表 单链表就地翻转 递归算法: void reverse(struct list_node *head) { if(NULL == head || NULL == head->next) return; reverse1(head->next); head->next->next = head; head->next = NULL; } 非递归算
也称为跳跃表(Skip List)是一种基于【有序链表】的扩展,简称【跳表】。 存储的数据是有序的。 所以跳表对标的是平衡树(AVL Tree)和二分查找,是一种插入/删除/搜索都是O(log n)的数据结构。 它最大的优势是原理简单、容易实现、方便扩展、效率更高。 定义 增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链
分治和回溯其实本质上就是递归,只不过它是递归的其中一个细分类。可以认为 分治和回溯 最后就是 一种特殊的递归 或者是较为复杂的递归即可。 分治算法,即分而治之(divide and conquer,D&C),把 一个复杂问题 分成 两个或更多 的相同或相似 子问题,直到最后子问题可以简单地直接求解,最后将子问题的解合并为原问题的解。 分治法的核心思想就是,将原问题分解成小问题来求解,只要遵循三个步
链表的概念 逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表(数组)那样也相互紧挨着。恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。 每个元素本身由两部分组成: 本身的信息,称为 数据域 指向直接后继的指针,称为 指针域 内存分布 数据是连续存储的,一个挨着一个,连续的。链表是存储单元不一定是连续的, 主要分类 单向链表 循环链表 双向链表 双向循环链表 单向
目标 在本章中,我们将理解k-最近邻(kNN)算法的概念。 理论基础 kNN是可用于监督学习的最简单的分类算法之一。这个想法是在特征空间中搜索最接近的测试数据。我们用下面的图片来看看它是怎么工作的。 在图像中,有两类家庭,蓝色方块和红色三角形。我们称每种家庭为一个为Class。他们的房子被显示在他们的城镇地图上,我们称之为特征空间。 (您可以将一个特征空间视为所有数据投影的空间,例如,考虑一个二维
目标 在这一章中我们将学习 BRIEF 算法的基础知识 理论基础 SIFT^2算法使用 128 维的向量描述符。由于它使用的是浮点数,因此它至少需要 512 字节。相似地,SURF^3 算法也至少需要 256 字节(64 维)。创建这样一个数以千计的特征向量需要大量的内存,这对于一个资源有限的应用,尤其是嵌入式系统上的应用来说是不可接受的。而且所消耗的内存空间越多,匹配花费的时间也越长。 但是实际