package Chapter2;
/*
* 题目:算法导论2.3.7
* 请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,
* 判断出S中是否存在有两个其和等于S的数
*
*算法思想:
*1、默认集合S是排序过的,若果没有排序,先排序。。。各种排序方法。
*2、本问题是二分查找的变形。。
* for i ←1to n
* temp=x-array[i]
* 二分查找temp
*
*/
public class SearchSum {
public static void main(String args[])
{
int[]s={1,3,6,9,45,68,106};
int x=9;
Index index = new SearchSum().getFittedIndex(s, x);
if(null==index)
System.out.println("can't find");
else
{
System.out.println("index_1: "+index.getIndex_1());
System.out.println("index_2: "+index.getIndex_2());
}
}
public Index getFittedIndex(int []s,int x)
{
int result=-1;
int i;
for( i=0;i<s.length-1;i++)
{
int temp=x-s[i];
//二分查找temp
result = search(s,1,s.length-1,temp);
if(result>=0)
break;
}
if(result<0)
return null;
else
return new Index(i,result);
}
public static int search(int[] array,int start,int end,int target)
{
int middle = (start+end)/2;
if(target==array[middle])
return middle;
/*
* 当数列只剩两个元素时{start,end}
* 由于middle每次都等于start,故做特殊判断
*
*/
if(end==start+1)
if(target==array[end])
return end;
else
return -1;
if(target<array[middle])
return search(array,start,middle,target);
if(target>array[middle])
return search(array,middle,end,target);
return -1;
}
}
class Index {
private int index_1;
private int index_2;
public int getIndex_2() {
return index_2;
}
public void setIndex_2(int index_2) {
this.index_2 = index_2;
}
public int getIndex_1() {
return index_1;
}
public void setIndex_1(int index_1) {
this.index_1 = index_1;
}
public Index(int index_1, int index_2) {
super();
this.index_1 = index_1;
this.index_2 = index_2;
}
}
分享到:
相关推荐
《算法导论》是计算机科学领域的一本经典教材,它深入浅出地介绍了各种重要的算法,并提供了详尽的实现和分析。在这个压缩包中,包含了课后习题2.3-7“合并排序”和思考题2-4“逆序对”的解答源码。这两个问题都是...
TarsosDSP 库的定位 : 数字信号处理 ( DSP ) 算法都很复杂 , 涉及傅里叶变换 , 数字滤波器等算法 , 复变函数等数学理论 , 想想就很复杂 ; ① 小巧简单 : TarsosDSP 库在旨在减小函数库库的体量 , 可以简单地调用 ...
introduction_to_algorithm 中文版为算法圣经,此处整理资源来自 https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/index.htm 的...
算法导论第三版练习题15.2-2的C++实现方案
最近在研习算法导论,发现课后习题的精彩程度甚至不亚于正文,对于算法导论的爱好者而言,这是一份不错的参考资料
算法导论--编程中经典的经典,值得每一位程序员用心品读
《算法导论--教师手册》是一本针对计算机科学专业学生及教师的重要参考书籍,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同编撰,第二版由Thomas H. Cormen、Clara Lee...
《算法导论》是计算机科学领域的一本经典教材,它深入浅出地介绍了各种重要的算法,并提供了详尽的分析和实现。题目中的“4-4”可能指的是书中的第四章第四个习题,通常涉及图算法或者动态规划等主题。由于具体描述...
3. **排序与搜索**:快速排序、归并排序、堆排序、冒泡排序、二分查找等是常见的排序和搜索算法,它们在实际应用中广泛使用,学习这些算法有助于提高代码的效率。 4. **递归与分治策略**:递归是一种函数自我调用的...
`pylzma`是Python对7-Zip的LZMA压缩算法的实现,7-Zip是一款广泛使用的开源压缩软件,以其高度的压缩效率而闻名。LZMA(Lempel-Ziv-Markov chain algorithm)是一种数据压缩算法,它基于预测的字典编码和自适应编码...
其次,搜索算法是另一个重点,如二分查找、广度优先搜索(BFS)和深度优先搜索(DFS)。这些算法在解决查找问题和遍历复杂数据结构时起着关键作用。此外,书中还讨论了回溯法和分支限界法等高级搜索策略。 图算法...
搜索算法方面,二分查找、线性查找以及哈希表的查找技术可能会被详细讨论。 在数据结构部分,PPT可能会涵盖数组、链表、栈、队列、树(二叉树、平衡查找树如AVL和红黑树)、图等基本数据结构。每个数据结构的特点、...
算法导论,英文版,附习题解析 Introduction to Algorithms, Second Edition Thomas H. Cormen Charles E. Leiserson Ronald L. Rivest Clifford Stein The MIT Press
例如,PS1可能会介绍基本的排序算法如冒泡排序、插入排序,以及查找算法如线性查找和二分查找。 2. **数据结构**:数据结构是算法的基础,作业中可能涉及到数组、链表、栈、队列、树、哈希表等。例如,PS4和PS5可能...
总的来说,`detoxed-0.1.2.3-py3-none-any.whl` 是一个针对Python 3编译的二进制库文件,用于提供特定的Python功能。用户可以通过pip安装,但具体的应用场景和功能需要通过查阅相关文档来了解。在Python开发中,合理...
《算法导论》第二十章习题解答涵盖了各种高级算法问题,主要涉及图论和网络流等内容。在这一章中,作者深入探讨了如何解决实际问题,如最短路径、最大流最小割以及网络调度等问题。以下是部分习题的解析和相关知识点...
本次上传的文件包含《算法导论》课程前七章的学习笔记,内容涵盖了基础算法(如插入排序、归并排序)、递归方程的解法、数据结构(如堆、二叉搜索树)的操作与分析,以及图论算法(如BFS、DFS)等。该笔记详细记录了...
根据提供的信息,《算法导论》是一本非常经典的教材,涵盖了计算机科学中算法设计与分析的基础理论及实践应用。下面将针对题目中提到的部分章节进行详细的知识点解析。 ### 第2章:分治法 #### 2.1 分治法概念 - *...
为了克服这一问题,本文将介绍一种经典的温度查表算法——二分查找法,并探讨其在NTC测温中的应用。 二分查找法是一种有效的在有序数组中查找特定元素的算法。其基本原理是,在每次查找过程中,算法都会将查找范围...
讲解算法导论的原版书籍,每个算法都提供伪码及正确性证明,值得一看