
【技术】算法系列
文章平均质量分 91
多则惑少则明
让天下没有难测试的项目。专注于测试开发领域,近9+年的工作实战经验,主攻方向包括:
0-1/中期/成熟类大型/复杂系统的业务测试
自动化测试平台&框架开发;
打造质量体系及沉淀质量方法论
个人邮箱zpphnkjxy@126.com
文章周末定时更新,其余时间不定时更新
展开
-
分类算法测试
一、分类算法按照一定标准将不同个体分成不同种类。应用:人脸识别、图像识别、作弊监测主要的分类算法种类:决策树、人工神经网络、遗传算法、朴素贝叶斯、KNN、SVM等算法。例如,朴素贝叶斯的思想是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别的概率,哪个最大,就认为该待分类项属于哪个类别二、测试策略主要从正确率、错误率、灵敏度、鲁棒性等角度出发验证分类效果的优劣。...原创 2019-11-15 23:34:08 · 1443 阅读 · 0 评论 -
浅谈算法效果测试
目录前言算法效果测试概况推荐算法效果测试的实施具体的测试方案整体的测试步骤形成的工具平台前言 前几个月写过算法类测试,写的比较简略,这里想结合最近的心得,说说算法效果测试的那些事。算法的特性:1、输出具有不确定性2、允许有badcase存在3、结果短期内不一定可见算法分类:1、最优化算法。找到特定场景下的最优解,比如,广告中广告...原创 2019-11-15 22:42:20 · 1527 阅读 · 0 评论 -
编程素养:编写没有bug,规范的代码
/************************************************************************* 函数名:haveCycle** 函数功能:判断链表是否有环 返回结果:有环返回true,否则返回false 参 数:链表头指针** 创建: 2014/3/20** 版本号:原创 2014-03-20 13:26:08 · 599 阅读 · 0 评论 -
算法易错点:二分代码/奇偶调顺序/查找第一次出现的字符
二分查找二分查找代码 二分查找的原理想必不用多解释了,不过有一点必须提醒读者的是,二分查找是针对的排好序的数组。OK,纸上读来终觉浅,觉知此事要躬行。我先来写一份,下面是我写的一份二分查找的实现(之前去某一家公司面试也曾被叫当场实现二分查找,不过结果可能跟你一样,当时就未能完整无误写出),有任何问题或错误,恳请不吝指正:1. //二分查找V0.1实现版 2. //copyr转载 2014-03-15 14:50:30 · 879 阅读 · 0 评论 -
《算法导论》第2章霍纳规则
霍纳规则用于计算以下多项式的值,并使乘法的次数最少: 现在给定a0, a1, ... ,an的值以及x的值,计算P(x)。 使用霍纳规则计算多项式:double polynomial(vector a, double x){double y=0;for(int i=a.size()-1;i>=0;i--) y=a[i]+转载 2014-03-10 17:11:10 · 1589 阅读 · 0 评论 -
《算法导论》 等概率产生0和1(延伸)
《算法导论》题目:已知一个随机数发生器A,产生0的概率是p,产生1的概率是1-p,要求构造以下随机数生成器, 效率尽可能的高。产生0,1概率分别为1/2的随机数生成器B;核心思想就是从随机数发生器产生的一列数中找到概率相同的某些数代表我们将要生成的数,即抛弃一些随机产生的数,留下那些概率相同的。上题的解法如下:让随机数生成器A产生两个随机数,产生的可能序列转载 2014-03-10 11:12:19 · 2059 阅读 · 0 评论 -
百度2011招聘笔试题+答案解析
1、设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。方法一:int count = 0; 2 while( count n) 3 { 4 x = rand(-R, R); 5 y = rand(-sqrt(R*R-x*x), sqrt(R*R-x*x)); 6 if(x*x + y*转载 2014-03-10 09:56:25 · 895 阅读 · 0 评论 -
生成N个[s,e)范围的随机数
原文地址:http://blog.youkuaiyun.com/morewindows/article/details/7659532方法 缺点:调用随机函数次数过多,从而效率低下改进方法思想可以采用一种改进的方法,如要生成3个1到10之间的数,取10-3=7,因此可以先t=rand()%7,保存t,然后再t=rand()%8,如果t这个数已经存在就取8保存,再t=rand()%转载 2014-02-15 15:18:46 · 855 阅读 · 0 评论 -
全排列 递归,非递归
原链接:http://blog.youkuaiyun.com/MoreWindows首先来看看题目是如何要求的(百度迅雷校招笔试题)用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac,cab, cba全排列的非递归实现【没有重复】或者使用STL的pre_permutation算法也可以转载 2014-02-15 12:42:51 · 1004 阅读 · 0 评论 -
大数据量的算法面试题
原链接:http://blog.youkuaiyun.com/v_july_v/article/details/7382693何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构转载 2014-03-13 18:23:22 · 2155 阅读 · 0 评论 -
N把钥匙开门的概率问题
在一冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把可以打开宝箱,假如没有任何提示,随机尝试,问:(1)恰好第K次(1=(2)平均需要尝试多少次。解:(1)方法一:(N-1)!/N!=1/N 方法二:分次计算,第一次尝试概率P1=(N-1)/N 第二次原创 2014-03-08 17:23:40 · 5401 阅读 · 0 评论 -
链表面试题小结
某本书上面说了,链表这个东西,实际用的并不多,但是可以提供很好的考察面试者编程技巧和思维能力的素材。这里总结一下,见过的面试题和对应的候选解法。题一、 给定单链表,检测是否有环。 使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。http:/转载 2014-03-08 15:16:47 · 661 阅读 · 0 评论 -
n节点组成二叉树的个数
可以分析,当n=1时,只有1个根节点,则只能组成1种形态的二叉树,令n个节点可组成的二叉树数量表示为h(n),则h(1)=1; h(0)=0; 当n=2时,1个根节点固定,还有2-1个节点。这一个节点可以分成(1,0),(0,1)两组。即左边放1个,右边放0个;或者左边放0个,右边放1个。即:h(2)=h(0)*h(1)+h(1)*h(0)=2,则能组成2种形态的二叉转载 2014-03-08 10:25:02 · 3408 阅读 · 1 评论 -
字符串转换成整数/带通配符的字符串匹配
需要注意的细节,如zhedahht所说:“由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负。因此我们需要把这个字符串的第一个字符做特殊处理。如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。接着我们试着处理非法输入。由于输入的是指针,在使用指针之前,我们要做的第一件是判断这个指转载 2014-03-18 17:10:33 · 1023 阅读 · 0 评论 -
2014年阿里校招笔试题目
题目一、单选题1.假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数A: h(K)=K/N;B: h(K)=1;C: h(K)=K mod N;D: h(K)=(K+rand(N)) mod N, rand(N)返回0到N-1的整数选择C,解释:由于hash的特性在于常数的时间执行插入、删除和查找操作,用D作为hash函数无法满足该条件。2.下面排序原创 2014-03-29 17:06:12 · 2034 阅读 · 0 评论 -
算法类测试
目录算法目标算法测试类型1、算法模型测试2、性能测试3、稳定性测试4、业务测试5、效果测试算法目标一个算法上线后,到底是好还是不好,由具体的效果说了算。 算法效果大致可以从以下方面思考:业务指标。 业务上,达到了什么效果 转化类效果指标。 pv,uv提升多少、带来了多少新客流,转化率(如购买率)等 技术类效果指标。算法效率提升多少,性能提升多少算法测试...原创 2019-03-31 10:12:56 · 2917 阅读 · 0 评论 -
快排,堆排序,折半查找算法(Java版)
1. 快速排序package com.zhou.algorithm;//快速排序public class AlgorithmQuickSort { public int partition(Integer[] list, int low, int high) { int par = list[low]; //数组的第一个作为中轴 whi原创 2015-11-09 12:04:13 · 1204 阅读 · 0 评论 -
必看经典算法_秘籍
(1)O(logn)求Fibonacci数列http://blog.youkuaiyun.com/huazhongkejidaxuezpp/article/details/22496879(2)写一个程序,要求功能,求出用1、2、5这三个数不同个数组合的和为100的组合数)http://blog.youkuaiyun.com/huazhongkejidaxuezpp/article/details/224原创 2014-03-31 10:37:39 · 640 阅读 · 0 评论 -
请把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。
转载自:酷壳,http://coolshell.cn/articles/3445.html#more-3445转载 2014-04-09 15:54:47 · 1779 阅读 · 0 评论 -
必看算法集合_2014找工作准备
/************************************************************************* 程序功能:有N个大小不等的自然数(1--N),请将它们由小到大排序。 要求:时间复杂度为O(n),空间复杂度为O(1)。* ****************************************原创 2014-04-09 11:00:47 · 883 阅读 · 0 评论 -
用位运算实现两个整数的加减乘除运算
以下的内容经过了自己的整理:转载 2014-04-04 14:54:18 · 2303 阅读 · 0 评论 -
360笔试
eee转载 2014-03-25 09:01:45 · 3686 阅读 · 0 评论 -
判断表达式中的括号是否匹配
设有算术表达式,其中包含有大括号“{ "" }" 中括号"[" "]" 小括号 "(" ")"试编写一个函数,判断表达式中的括号是否匹配?方法一:利用栈方法二:首尾各一个指针,在向中间移动的过程中判断方法三:递归不好理解的递归实现:#include#include#define FAIL -1#define SUCCESS 0char *nex转载 2014-03-18 18:50:07 · 6713 阅读 · 0 评论 -
编程判断两个链表是否相交
原链接:http://blog.youkuaiyun.com/v_JULY_v/article/details/6447013总结:所以,事实上,这个判断两个链表是否相交的问题就转化成了:1.先判断带不带环2.如果都不带环,就判断尾节点是否相等3.如果都带环,判断一链表上俩指针相遇的那个节点,在不在另一条链表上。如果在,则相交,如果不在,则不相交。 1、那么,如何编写转载 2014-03-12 20:19:57 · 1014 阅读 · 0 评论 -
写出高效执行且规范的代码
技巧总结:1.求int型的MAX,MINstatic const int MAX = (int)((unsigned)~0 >> 1); //32767 static const int MIN = -(int)((unsigned)~0 >> 1) - 1;/-327682.常用的变量声明为register register long acc, cutoff;原创 2014-03-21 15:42:21 · 725 阅读 · 0 评论 -
回文判断问题
一、回文判断 那么,我们的第一个问题就是:判断一个字串是否是回文方法一: 通过对回文字串的考察,最直接的方法显然是将字符串逆转,存入另外一个字符串,然后比较原字符串和逆转后的字符串是否一样,一样就是回文,这个方法的时空复杂度都是 O(n)。方法二:一个字符串进栈后,再出栈,和原字符串一样或者使用单链表,处理的思想不难想到:用两个指针从两端或者中间遍历并转载 2014-03-13 18:49:20 · 1053 阅读 · 0 评论 -
动态规划算法解最长公共子序列LCS问题
第一部分、什么是动态规划算法ok,咱们先来了解下什么是动态规划算法。动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划算法分以下4个步骤:描述最优解的结构递归定义最优解的值按自底向上的方式计算最优解的值 //此3步构成动转载 2014-03-13 10:54:39 · 1402 阅读 · 0 评论 -
给定一个字符串,输出最长的重复子串
给定一个字符串,输出最长的重复子串举例:ask not what your country can do for you,but what youcan do for your country最长的重复子串:can do for you思路:使用后缀数组解决分析:1、由于要求最长公共子序列,则需要找到字符串的所有子串,即通过产生字符串的后缀数组实现。转载 2014-03-05 15:45:12 · 1516 阅读 · 0 评论 -
给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
只要我们可以从 n 个数中随机选出 1 到 n 个数,反复进行这种运算,直到剩下最后一个数即可。 我们可以调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置即可满足以上要求。 例如 初始的 7 个数 [1,2,3,4,5,6,7]. 7 个 1 到 5 的随机数 [5, 3,1,4,2,5转载 2014-03-03 21:55:38 · 1192 阅读 · 0 评论 -
写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)
由于错误情况比较复杂,所有对错误情况并无处理(正确的字符串可以正确返回) #include "stdio.h"#include "stdlib.h"#include "string.h" long strtoint(char* str, int len) { if(len > 1) {转载 2014-03-03 20:23:27 · 866 阅读 · 0 评论 -
有一个整数数组,请求出两两之差绝对值最小的值
有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。 方法《1》:暴力的方式。遍历所有的两个数的差,记录最小值。算法的复杂度O(n2) 方法《2》:两个数要想差的绝对值最小,肯定是需要两个数大小相近。故有思路:先对数组进行排序,然后遍历一遍,相邻的数相减,记录绝对值最小的数。 方法《3》:将现在的问题进行转化转载 2014-03-03 20:01:10 · 2545 阅读 · 0 评论 -
组合问题(从M个不同字符中任取N个字符的所有组合)
递归代码:原理见链接void Combination(char *string ,int number,vector &result); void Com(char *string,int N) { assert(string != NULL); vector result; int i , length = strlen(string);转载 2014-03-03 21:06:02 · 2001 阅读 · 0 评论 -
字符串的组合 位图和递归分别实现
方法一:利用位图方法求字符串的组合(类似于位运算模拟加法)题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 解析:我们可以通过位数组来实现打印所有组合,这类似于用字符串模拟加法操作一样。不过用字符串模拟加法操作是逢10进1,用位模拟是逢2进1。以abc为例:初始化位bitset 模拟每次加1它的变化为转载 2014-03-03 20:39:29 · 1249 阅读 · 0 评论 -
最大子段和——分治与动态规划
问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1 例如,当(a1,a2,a3,a4,a4,a6)=(-2,11,-4,13,-5,-2)时,转载 2014-03-03 19:54:19 · 720 阅读 · 0 评论 -
最大子段和
动态规划是一个很巧妙的算法,但是能够想得到如何用动态规划,我感觉还是有难度的。不过慢慢来,先从小的动态规划的例子开始。现在有一个数组,请找出这个数组的最大子段和。(即 max (a[i]+a[i+1]+...+a[j]) 0现在我们的思路是: 记s[i]为 a[0]到a[i]中包含a[i](即以a[i]为结尾)的最大子段和,则s[i]如何用s[i-1]来表示?s[i] = s转载 2014-03-03 19:46:45 · 561 阅读 · 0 评论 -
不用 "%" && "/" 编程实现两个正整数的除法,取余数
题目描述:编程实现两个正整数的除法,当然不能用除法操作符。// return x/y.int div(const int x, const int y) { ....}位移运算的方法:#include int div(const int x, const int y) { int dividend =转载 2014-03-03 21:39:15 · 2872 阅读 · 0 评论 -
模拟 二进制,十进制的加1
位图模拟二进制的加1【建议采用】当所有位均为1时,返回false;否则返回true,表示还可以继续增加boolIncrement(bitset&bits) { if(CHAR_COUNT return false; for(int i = CHAR_COUNT-1; i >=0; i--) { if(0 == bits原创 2014-02-15 10:47:40 · 1053 阅读 · 0 评论 -
Inplace Stable Partition 稳定划分
如何在空间复杂度为O(1)的情况下进行稳定的划分。首先看两道面试题:百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变。时空复杂度要求分别为:o(n)和o(1)。百度面试题(二),给定一个存放正数的数组,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。时空复杂转载 2014-02-22 10:33:55 · 1559 阅读 · 0 评论 -
最大连续乘积子串
题目描述:给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8。也就是说,上述数组中,3 0.5 8这3个数的乘积3*0.5*8=12是最大的,而且是连续的。提醒:此最大乘积连续子串与最大乘积子序列不同,请勿混淆,前者子串要求连续,后者子序列不要求连续。也就是说:最长公共子串(Longest CommonSubst转载 2014-03-05 20:04:04 · 933 阅读 · 0 评论 -
0/1背包问题 蛮力/动规/回溯/分支定界
一、题目 :分别用蛮力法、动态规划法、回溯法和分支限界法求解0/1背包问题。注:0/1背包问题:给定种物品和一个容量为的背包,物品的重量是,其价值为,背包问题是如何使选择装入背包内的物品,使得装入背包中的物品的总价值最大。其中,每种物品只有全部装入背包或不装入背包两种选择。二、所用算法的基本思想及复杂度分析:1.蛮力法求解0/1背包问题:1)基本思想:对于有n种可选物品的0转载 2014-03-06 20:12:23 · 10436 阅读 · 1 评论