
algorithm
lvjing2
吾尝终日而思矣不如须臾之所学也吾尝跂而望矣不如登高之博见也君子生非异也善假于物也
展开
-
带头节点单链表的所有操作(目前我所想到的),linux纯C实现
首先是链表的头文件,所有的函数和函数的功能解释都包含在这里: list.h#ifndef _LIST_H_#define _LIST_H_#endif#include #include #include struct node;typedef struct node* pNode;typedef int dataType;typedef pNode list;typ原创 2013-11-01 21:49:49 · 1902 阅读 · 0 评论 -
求解字符串间最短距离(字符串相似度)
问题描述:给定任意两个字符串,比如:str1=“abcd”和str2=“gbcdz”,计算这两个字符串间的相似度。计算两字符串的相似度可等价于计算将str1变换到str2所需要的最少步骤。问题分析:为计算将str1变换到str2所需最小操作步骤,必须先对变换操作进行定义:修改一个字符(如把“a”替换为“g”);增加一个字符(如把“abcd”变为“abcdz”);删除一个字符(如把“travel原创 2015-04-20 16:05:39 · 2283 阅读 · 0 评论 -
求解字符串间最短距离(字符串相似度)
问题描述:给定任意两个字符串,比如:str1=“abcd”和str2=“gbcdz”,计算这两个字符串间的相似度。计算两字符串的相似度可等价于计算将str1变换到str2所需要的最少步骤。问题分析:为计算将str1变换到str2所需最小操作步骤,必须先对变换操作进行定义:1.修改一个字符(如把“a”替换为“g”);2.增加一个字符(如把“abcd”变为“ab原创 2013-12-22 17:42:47 · 4589 阅读 · 0 评论 -
2016微软实习在线笔试题 - Professor Q's Software
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Professor Q develops a new software. The software consists of N modules which are numbered from 1 to N. The i-th module will be started up by signal Si. If si原创 2015-04-05 19:18:58 · 2196 阅读 · 1 评论 -
2016阿里实习线上笔试题-附加题1-随机数生成器
随机数生成器计算机使用的随机数生成器往往是伪随机的,为了达到统计意义上的真随机数,可以需要引入系统 外的变量等作为随机种子(如UNIX系统中熵池)。假设有一天出现了上帝的投硬币函数: int G(); 由于这里用到的上帝硬币可能不均匀。但可以保证是G()可以x概率返回1,1-x的概率返回0,其中x为未知常数(且x不等于0或1)。请实现目标函数: int F(double p); 要求F函数以原创 2015-04-02 22:04:34 · 4304 阅读 · 1 评论 -
计算机科学中最重要的32个算法
奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。A* 搜索算法——图形搜索算法,从给定起点到给定终点计转载 2014-12-04 17:05:40 · 924 阅读 · 0 评论 -
分治法求最大子序列
假设序列为a[10] = {4,-3,5,-2,-1,2,6,-2,3}算法思想采用二分策略我们知道,最大子序列出现的可能只有三种:1. 只出现在前半部分;2. 只出现在后半部分;3. 横跨了整个序列。我们只需把三种可能的最大子序列和都求出,然后找到其中最大的那个,就是这个序列的最大子序列了。然后用递归的方法就可求出整个序列的最大子序列以及最大子序列之和了。在这个序列中前半原创 2013-11-02 14:57:12 · 2988 阅读 · 1 评论 -
二分法实现插入排序,时间复杂度O(nlgn),算法导论练习2.3,linux纯C实现
#include int binarySearch(int* a, int fI, int lI, int N){ int mI = (fI+lI) >> 1; if (N > *(a+mI)) { fI = mI + 1; if(fI > lI) return mI+1; binarySearch(a, fI, lI, N); } else if (N < *(a原创 2013-10-20 14:15:21 · 4285 阅读 · 0 评论 -
经典快速排序,linux纯C实现。注意swap方法,并且这个算法还需再敲写15篇。
#include void swap(int* a, int* b){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}int partition(int* a, int fI, int lI){ int i = fI-1, j = 0, key = *(a+lI); for(j=fI;j<=lI;j++) { if(*(a+j) <原创 2013-10-24 20:50:07 · 2717 阅读 · 0 评论 -
除10运算的快速算法
例如A/10,原本打算通过位操作,进行除10运算,但后来发现通过简单的移位基本上无法实现除10操作。在一番搜索之后,发现了两个比较好的解决方法:1.通过乘以2^32/10的值429496729.6,十六进制表示为19999999.99999999A,取整为1999999A,然后再右移32位,达到误差基本可以忽略的一种快速计算。本方法假定了是32位的机器,故64位机器需要自己修改代码。(原创 2013-12-22 19:10:27 · 8527 阅读 · 1 评论 -
数组排序(来自庞果网)
题目说明:本题来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”内),以下是题目详情: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。 例如: 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。 原数组是2,3,1,我们原创 2013-09-04 16:49:50 · 1821 阅读 · 3 评论 -
递归实现插入排序,算法导论练习2.3,linux C实现
采用递归实现插入排序,代码简洁,linux下纯C实现,编译通过,核心函数如下:void sort(int* a, int index, int N){ int key = *(a + index); int i = index - 1; if(index+1 <= N) { for(;i>=0;i--) if(key >= *(a+i)) break; e原创 2013-10-18 15:32:20 · 1474 阅读 · 0 评论 -
判断序列中是否存在两个元素之和为x,时间复杂度O(nlgn),算法导论练习2.3,linux纯C实现
#include #include bool binarySearch(int* a, int L, int N){ int fI = 0, lI = L-1, mI = 0; while(fI <= lI) { mI = (fI+lI) >> 1; if(N > *(a+mI)) fI = mI + 1; else if(N < *(a+mI)) lI = m原创 2013-10-23 17:05:54 · 1904 阅读 · 0 评论 -
冒泡排序(工程中很少使用,时间复杂度太差了),linux纯C实现
#include void swap(int* a, int* b){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}void bubbleSort(int* a, int L){ int i = L, j = 0; for(;i>=0;i--) for(j=0;j<i-1;j++) { if(*(a+j+1) < *(a+j原创 2013-10-23 19:37:46 · 1296 阅读 · 0 评论 -
单链表查找倒数第i个结点,linux纯C实现
本例中使用的单链表库是自己编写的,在前面博文中有提到过:http://blog.youkuaiyun.com/lvjing2/article/details/14045011这次关于单链表的算法,就是引用这个库进行实现的,所以如果需要测试本算法,就需要拷贝下前文中的代码了。好了,废话不多说了。算法要求:输入一个单链表,输出该链表倒数第i个结点。链表的倒数第0个结点为该链表的尾指针。原创 2013-11-02 16:27:21 · 2138 阅读 · 0 评论 -
leetcode及剑指offer中的缺失数据之最快解法
> 给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。这篇文章就是希望能给网友们提供一种新的思路,希望有缘人可以看到这种解法。在leetcode上查看速度最高的解法,都是通过计算0-n的求和,然后遍历数组,减去所有元素的值,最终得到缺失的元素。。这里提出一种更快的解法:异或法求解。思路就是定义两个变量o1和o2.o1= 0^1^...原创 2018-06-24 10:25:09 · 439 阅读 · 0 评论