Algorithm
文章平均质量分 85
忆之独秀
Engineer
展开
-
多线程技术模拟并行计算之一:查找极大独立集(Find the Maximal Independent Set)
1.极大独立集的概念:2.查找极大独立集的串行算法:首先设置集合S为空,遍历所有的顶点v,如果顶点v在S集合中没有邻居,那么就将顶点v加入到集合S中,最终得到的集合S就是MIS(Maximal Independent Set)。伪代码:S = empty set;for vertex v = 1 to n { if (v has no nei原创 2013-06-11 10:34:03 · 2976 阅读 · 3 评论 -
简单的面试算法题:非循环求字符串长度和字符串拷贝源函数
1.如何不调用库函数且不用循环的原创 2014-05-17 16:40:25 · 1515 阅读 · 0 评论 -
多线程技术模拟并行计算之二:数组前缀和(Prefix Sum)
一、前缀和(Prefix Sum)定义:给定一个数组A[1..n],前缀和数组PrefixSum[1..n]定义为:PrefixSum[i] = A[0]+A[1]+...+A[i-1];例如:A[5,6,7,8] --> PrefixSum[5,11,18,26]PrefixSum[0] =A[0] ;PrefixSum[1] =A[0] + A[1] ;Prefix...原创 2014-09-06 20:59:53 · 9007 阅读 · 0 评论 -
二叉树的几种遍历方式浅析:递归遍历/堆栈遍历/层序遍历/Morris遍历
递归和堆栈来实现二叉树的遍历原创 2014-08-25 16:01:40 · 4335 阅读 · 0 评论 -
数组及链表的归并排序(C++实现)
本文只是对数组原创 2014-09-04 13:14:42 · 3272 阅读 · 0 评论 -
链表逆序(递归&非递归)/倒序输出链表值/用一个递增序列构建平衡二叉搜索树/用递归的方法判断数组是不是升(降)序排列
下面要讨论的问题还是作为自己复习的一个记录吧。1.首先是链表的逆序,有两种方法可以实现,递归和非递归。非递归:设置三个指针变量,ppre,pcur,pnext,初始ppre指向NULL,pcur指向头结点,pnext指向pcur的下一个结点。在转化的过程中注意指针的移动和复制。还有到最后注意next指针域的赋值。递归:似乎也没啥好分析的,还是注意指针的移动和变化。这种问题还是想清楚,写...原创 2014-09-09 20:33:40 · 1743 阅读 · 0 评论 -
再看快速排序(QuickSort)
1.基本的快速排序2.快排的优化3.原创 2014-08-29 18:37:02 · 2838 阅读 · 0 评论 -
【Leetcode】:Reverse-Words-in-a-String
Address : https://oj.leetcode.com/problems/reverse-words-in-a-string/问题描述:给一个string类型的字符串,让你将单词按照逆序输出。原创 2014-08-27 20:40:42 · 1308 阅读 · 0 评论 -
【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现&&相关面试题介绍
编程之美编程珠玑C语言缺陷bsearch()原创 2014-06-08 11:41:47 · 4696 阅读 · 2 评论 -
C语言MD5加密算法的简单调用实现(另附:Java/Python/Shell/Golang方法)
1.首先加上一些库:apt-getinstallopenssllibssl-devlibssl-doclibcurl4-openssl-dev2.实现一个用MD5加密密码的小程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<openss...原创 2013-09-09 22:55:17 · 3896 阅读 · 0 评论 -
面试算法题:乾坤大挪移(链表旋转K个位置)
题目:给定一个单向链表,设计一个算法实现链表向右旋转K个位置。K是非负的整数。举例:给定:1->2->3->4->5->6->null 并且 K=3;则有:4->5->6->1->2->3->null。分析:这道题看上去简单,但是能耐做到bug free还是需要仔细思考的。思考一些细节:1.当K=0,怎么办?2.当K等于链表长度时,怎么办?3.当K大原创 2014-02-24 16:53:43 · 1590 阅读 · 0 评论 -
数组排序--计算最小交换次数
给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。例如:原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。算法原创 2013-11-26 21:04:55 · 16068 阅读 · 1 评论 -
POJ3125--Printer_Queue
题目链接:http://poj.org/problem?id=3125 题目大家读一下意思很容易理解,在此就不赘述。本题主要就是考察单链表/队列的简单操作。算法设计:1.根据输入创建队列CreateList()函数,然后用addNode()函数向队列上增加结点,那么得到队列;结点定义为:typedef struct LNode{ int pri原创 2013-09-04 21:52:00 · 832 阅读 · 0 评论 -
【编程珠玑】第十五章--字符串:用后缀数组查找最长不重叠的重复子串
问题:给定一个文本文件作为输入,查找其中最长的重复子字符串。例如:“Ask not what your country can do for you, but what you can do for your country”中最长的重复字符串是“can do for you”,第二长的是“your country”。我们使用一个叫做“后缀数组”的简单数据结构。它是一个字符指针数组,记为a。读原创 2013-11-21 11:25:32 · 1728 阅读 · 0 评论 -
【编程珠玑】第十五章--字符串:统计文本中单词数量(C++的Map&C的结构体实现&POJ2418)
问题:将文档中包含的单词生成一个列表,并统计每个单词出现的次数。用两种方法:Solution1:用C++中STL的map,统计单词和出现的次数。Solution2:用C中的结构体实现:typedef struct Node{ char* word; int count; struct Node* next; }tNode;输入文件是一个简单的用引原创 2013-11-13 20:57:15 · 4159 阅读 · 2 评论 -
POJ1068--括号匹配(栈的应用)
题目:http://poj.org/problem?id=1068具体题目细节就不再描述了,大意就是给定一个合理匹配的括号字符串,给你一个p数组:每个元素值为第i个右括号左边的左括号的总个数;让我们求得w数组:每个元素为第i个右括号和其匹配的左括号之间(也包括匹配的括号)的左括号的总个数。算法思路:1.根据p将整个括号字符串创建出来,用stack栈s1来保存(栈中的每个结点原创 2013-12-08 18:24:43 · 1562 阅读 · 0 评论 -
POJ1363--出栈顺序(栈的应用)
题目:http://poj.org/problem?id=1363自己写完之后看到网上的做法的确感觉自己的算法很慢也很耗时,但是还是贴一下。题意不多说(当然也是读了很久才看懂),入栈顺序一定1,2,3...N,给你出栈序列,如果能按着出栈序列出栈则输出"Yes",否则输出"No"。算法:1.设置三个stack:A,B,buffer。A:N-->1依次入栈,栈顶为1;B:出栈原创 2013-12-12 16:45:47 · 1817 阅读 · 0 评论 -
POJ2503--(STLmap应用)
题目:http://poj.org/problem?id=2503题意很简单直接上代码:#include#include#include#include#includeusing namespace std;int main(){ string s; string first,second; map m; while( g原创 2013-12-13 09:21:47 · 1224 阅读 · 0 评论 -
STL中map取最大最小键值方法(POJ3481)
首先介绍一下STL中map的架构:SGI STL map以红黑树为低层级制,每个节点的内容是一个pair。pair的第一个元素被视为键值(key),第二个元素被视为实值(value)。那么如何用O(1)的时间去取得最小或者最大的key值相对应的对(注意不是value,因为map是以key值即键值来构建平衡树的)。下面呈现一个代码:#include#includeusing原创 2013-12-14 17:23:18 · 15918 阅读 · 1 评论 -
POJ3096--Surprising Strings(简单的字符串处理和相同字符串统计)
题目大意:就是给定一个字符串s,长度为n,s中间隔为k(k=1,2,3...,n-2)的所有字符对如果没有相同的(保证所有k种距离下的情况),那么s是surprising的;否则NOT surprising。算法设计:枚举所有间隔为k内的字符对,如果每一个字符对仅出现一次,那么继续遍历,知道出现有重复的字符对相同,则说明NOT surprising。用map来映射每一个字符对的原创 2013-12-24 01:12:36 · 1413 阅读 · 0 评论 -
权重选择算法Java实现
我们有时候会遇到这种需求,那就是根据权重,按照比例去获取相应的信息,比如配置信息获取,负载均衡RS获取等。 在此就举一个例子,然后简单的实现。需求:后端有三台机器,信息分别为,S1, S2ip:"10.0.0.2",port:8082,weight:40>, S3ip:"10.0.0.3",port:8083,weight:60>,根据weight按照比例返回响应的机器信息。原创 2017-10-23 16:38:21 · 8310 阅读 · 2 评论