Visitors hit counter dreamweaver

06 2013 档案

摘要:问题描述:给定一个有n个数的序列集,求最大值和最小值。 解题思路:首先想到的的做法是首先任意选两个值作为最小值和最大值。然后剩下的n-2个值分别于这两个值进行比较即可。这样总共要 比较2*(n-2)次。有没有更好的做法呢,在算法导论第九章利就给出了这样一种思路:首先任意选两个值作为最小值和最大值。当然,奇数数组和偶数数组有点不同,奇数数组选第一个既是最大值,也是最小值。偶数数组先比较第一对数组,得出最大最小值。然后再将剩下的数分成两两一组,先两两比较,然后把较小的与最小值比较,较大的与最大值比较。剩下的(n-2)/2组中,每一组只需比较3次即可。也就是3*(n-2)/2。比前... 阅读全文
posted @ 2013-06-17 22:05 Jason Damon 阅读(815) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k大的元素,(这里给定的线性集是无序的)。 其实这个问题很简单,直接对线性序列集qsort,再找出第k个即可。但是这样的时间复杂度就是qsort的时间复杂度O(nlogn)。有没有更快的方法呢?看到网上有一种解法是采取了快排的思路,但是稍微坐了些改动,然后时间复杂度能够接近O(n)。因为最近刚刚写了快排的实现,所以在这我就再把这个实现一次吧。 解题思路:与快排不同的是,这里只对划分出来的其中一组进行递归处理。任意选定一个pivotIndex,pivotValue = arr[pivotIndex]。经过一次... 阅读全文
posted @ 2013-06-17 19:55 Jason Damon 阅读(15861) 评论(0) 推荐(0) 编辑
摘要:最近看到了伯乐在线编程挑战赛,觉得题目还比较适中,而且出发点非常好,至少对我这种菜鸟来说。首先,他不排名,其次还公布大家提交的源码,如果不会的话,可以参考别人的代码。并且可以学习高手们的思路和编码风格,对自己有非常大的帮助。以后我会一直坚持跟进他的题目。 今天把第0期的呼叫转移系统的题目看了下,第一次自己写的时候,没把情况考虑全。后来参考了别人的思路,最终把它给弄出来了。 要解决的就两个问题: 1)当天设置了多少个呼叫转移 2)最长的呼叫转移是多长次 ( A君转到B君,B君再转到C君。这个是2次呼叫转移) 第一个问题很好解决,只需判断要求的那天是否在某个人的假期里,在的话,总数++... 阅读全文
posted @ 2013-06-16 16:03 Jason Damon 阅读(652) 评论(0) 推荐(0) 编辑
摘要:快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。(出自维基百科)快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。在这里我采用的是递归调用分区算法把序列划分成两个子序列的方法来实现快排。具体的图例在维基百科里写得非常清楚,一看就明白了。分区算法: 首先寻找任意一个pivo 阅读全文
posted @ 2013-06-15 22:41 Jason Damon 阅读(1031) 评论(0) 推荐(1) 编辑
摘要:有些经典的算法,我们应该做到信手捏来。一看到某个经典的算法,脑子里马上要想到要怎么解决,最好还要马上动手把他时间出来,不要怕做重复的工作!这就是我以后我要的!信手捏来。随时准备着实现算法!冒泡排序:每次从起始位置开始(j=0),分别比较arr[j]与arr[j+1],若不是降序,则交换位置。这样每轮下来,就可以得到本轮中的最小,放在相应的位置。其实这个算法的关键在于循环的实现,因为每次都可以得此一个最小的,那么下次就不用再对它进行比较了。所以外层循环i每次减少1,可以用来控制循环的范围,内层循环用来控制每次比较。因此冒泡排序总的平均时间复杂度为O(n2)。#include <stdio. 阅读全文
posted @ 2013-06-15 13:48 Jason Damon 阅读(256) 评论(0) 推荐(0) 编辑
摘要:归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。(出自维基百科)平均时间复杂度Conceptually ,归并算法的基本步骤如下所示: 1)使用递归(recursion)方法把未排序的序列分成n个子序列,每个子序列只包含一个元素(一个元素被认为是有序的); 2)使用归并操作重复合并子序列产生新的序列,直到只剩下一个序列,那么这个序列就是有序的。归并操作(merge) ,也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并操作算法描述归并操作的过程如下: 阅读全文
posted @ 2013-06-15 12:35 Jason Damon 阅读(668) 评论(0) 推荐(1) 编辑
摘要:问题描述在一个2^k×2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。解题思路分析:当k>0时,将2k×2k棋盘分割为4个2^k-1×2^k-1 子棋盘(a)所示。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,如 (b)所示,从而将原问题转化为4个较小规模的棋盘覆盖问题。 阅读全文
posted @ 2013-06-14 22:32 Jason Damon 阅读(22899) 评论(5) 推荐(0) 编辑
摘要:exec+函数已经看过无数遍了,但是还是没有真正的实践过。今天正在要用到了,但是却不能正确使用,所以今晚回来再次认真的把它看了看。现在基本明白了,也会用了。关于这个函数族的介绍一抓一大把。我也不写了。但是看到一篇写得还不错的,把它记下来。http://qing.blog.sina.com.cn/tj/80dd113833001aqb.html 阅读全文
posted @ 2013-06-13 20:47 Jason Damon 阅读(226) 评论(0) 推荐(0) 编辑
摘要:今天开始开始深入的学习协议的相关知识。本科学的是网络工程,但是我却没有把协议学好,非常后悔!现在要趁大学还没结束,赶紧好好的补补! 今天的学习内容都是看小坦克的相关博文,他写得非常详细,排版也非常好,是写技术博客的模范啊!HTTP协议:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html#2703323wireshark使用和TCP三次握手:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html这里还有一篇前辈写的一篇关于如何学习协议的文章,非... 阅读全文
posted @ 2013-06-12 21:41 Jason Damon 阅读(243) 评论(0) 推荐(0) 编辑
摘要:本次实验都是基于《灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术》实现端口绑定shellcode有下面几个步骤:(1) 创建一个TCP套接字;(2) 将该套接字绑定到攻击者指定的端口,这个端口通常会被硬编码到shellcode中;(3) 让该套接字成为侦听套接字;(4) 接受新连接;(5) 将新接受的套接字复制到stdin、stdout和stderr上;(6) 创一个新的命令shell进程(它将通过这个新套接字接受输入数据并发送输出结果);port_bind_asm.asmBITS 33section .textglobal _start_start:xor eax,eax.. 阅读全文
posted @ 2013-06-02 16:53 Jason Damon 阅读(2620) 评论(3) 推荐(0) 编辑
摘要:二分查找时在给定已按升序排好序的n个元素a[0:n-1],用折半查找法在从这n个元素中找出一特定元素x,时间复杂性为O(logn)。 具体实现如下://二分查找static int binarySearch(int []a, int x, int n){ int left = 0,right = n-1; int middle; while (left <= right) { middle = (left+right)/2; if (x == a[middle]) return middle; if (x > a[mid... 阅读全文
posted @ 2013-06-01 22:07 Jason Damon 阅读(3633) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示