对二分法思想的理解 及 结对编程情况汇报

一、对二分法思想的理解

1.特点:又称为折半算法,是分治策略的一个典型例子。主要是用于:在已排好序的n个元素组成的数组a[0:n-1]中,找出一个特定的元素x。

2.基本思想:(1)将n个元素分成个数大致相同相同的两半,然后取a[n/2]与x作比较。

      (2)如果x = a[n/2],则已找到x,返回下标并结束算法;

        如果x < a[n/2],则只在数组a的左半部继续搜索x;

        如果x < a[n/2],则只在数组a的右半部继续搜索x;

3.时间复杂度:在二分搜索算法中,x每进行比较,待搜索的数据范围就折半一次,直到找到x;

       最坏情况为数组中没有x,则x需进行log n次比较,此时二分搜索算法的时间复杂度为O(log n);

       最好情况为x为数组最中间的值,即x只需进行一次比较,此时二分搜索算法的时间复杂度为O(1);

4.空间复杂度:在二分搜索算法中,只需要n个空间用于存放n个元素组成的数组a,无需其余辅助空间,所以二分搜索算法的空间复杂度为O(1);

5.优点:时间复杂度小,可用于数据量较大的情况。

6.缺点:只可用于一事先排好序的数组。

7.实现算法

(1)循环

int BinarySearch(int a[],int x,int n)
{
    int left = 0,right = n-1;
    while(left <= right)
    {
        int middle = (left+right)/2;
        if(x == a[middle]) return middle;
        if(x < a[middle]) right = middle - 1;
        else left = middle + 1;
    }
    return -1;
}

(2)递归

int BinarySearch(int a[],int left,int right,int x)
{
    int middle = (left + right) / 2;
    if(x = a[middle]) return middle;
    if(x < a[middle]){
        BinarySearch(a,left,middle-1,x);
    }
    else{
        BinarySearch(a,middle+1,right,x);
    }
    return -1;
} 

二、结对编程情况汇报

  跟partner结对至今,我们总共开展了两次合作讨论。

  第一次合作是讨论pintia上的“第二章作业”。刚开始时,我们对于选择题第7、12和15题的答案都是有点迷茫的,所以我们重点针对这些题目查找一些相关的资料并展开讨论,在经过多次讨论之后,我们最终成弄懂这些题目的含义并算出正确的答案。

  第二次合作是共同完成pintia上的“第二章实践”,由于我partner在课前已事先完成了这些题目,所以在课上,主要是我负责在思考解题方式和敲代码,而我partner主要负责在旁边忙纠错。三道题完成后,我们俩针对如何采用二分法解决第三题这个问题展开了讨论,并得出了解法的基本思想,但还有许多细节有待继续讨论。

  总而言之,这次个partner的结对编程在一定程度上拓宽了自身的解题思维,也帮助自己更好地去套用每一个算法。

原文地址:https://www.cnblogs.com/wanna-acm/p/9813927.html

时间: 2024-11-08 16:00:48

对二分法思想的理解 及 结对编程情况汇报的相关文章

对二分法思想的体会及结对编程情况汇报

一.对二分法思想的体会 二分法主要用于有序数组中查找元素,其时间复杂度相比之下更小. 不断变换指针位置缩小查找区间范围. 其主要代码为: 二.结对编程情况汇报 和能力强的同学一起组队,有很多值得学习的地方,比如算法思想.代码风格,甚至快捷键的使用. 探讨思想后合作完成代码,可以理清思路再动手实践,收获颇丰. 原文地址:https://www.cnblogs.com/Wqxxxx--/p/9795146.html

对分治法思想的体会及结对编程情况汇报

1.对分治法思想的体会 分治法就是将问题分解为规模更小的子问题,通过一一解决这些子问题,再将这些已经解决了的子问题合并起来,就得到了原问题的解.通过分治法的思想,我们可以更加轻松的解决规模很大的问题,也使得代码更加清晰,易于理解.我们在大一的时候其实已经接触过分治法的思想了,像二分查找,就是利用了分治法思想,使得查找算法的时间复杂度更低. 2.结对编程情况汇报 我和我的搭档一般情况下是独立编程,但是当我们其中一个或着两个人遇到编程难题时,就会互相讨论,一起寻找合适的算法去解决问题. 在之后的学习

对分治法思想的体会 &amp; 结对编程情况汇报

一.对分治思想的体会 1.帮助我们解决问题. 分治法,对大的问题拆封成规模较小的问题,我们求解小问题,再把小问题的答案合并起来,得出大问题的答案.大问题思考起来比较乱,犯迷糊,不易想到解决方法,比如汉诺塔问题.分解成小问题,我们就容易想出方法来解决问题 2.时间复杂度低 分治法思想核心是递归,递归的时间复杂度低.算法的复杂度低,提高了算法的质量 二.结对编程情况汇报 3道题都做完且答案正确,第三道题,没有按时间复杂度为O(logn)编程,后来查找资料知道如何写出O(logn)的算法.第一题,开始

对二分法的理解以及结对编程情况

一. 二分法思想 1. 要求 二分法要求线性表必须采用顺序存储结构,表中元素要按关键字有序排列. 2. 时间复杂度及分析体会 最好情况:1次 最坏情况:O(log n) 这种算法是一种典型的分治的策略,并且这种算法很利于理解,它利用了元素之间的次序关系.相对顺序查找这种方法的效率较高,它能在大多数的情况,例如数据量很大,并且有序的时候,实现更快的数据查找功能,也是比较常用且易于想到的一种算法实现. 3. 代码 #include <iostream>using namespace std;int

对二分法的理解和结对编程情况

一.对二分法的理解 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的左半段中查找;若x大于当前位置值则在数列的右半段中继续查找,直到找到为止. 时间复杂度: 最好情况:1次 最坏情况:O(log n)次 感想:二分算法充分利用了元素间的次序关系,采用分治策略,并且便于初学者学习理解.相对顺序查找这种方法的效率较高,它能在大多数的情况,例如数据量很大,并且有序的时候,实现更快的数据查找功能,也是比较常用且易于

对二分算法的理解及结对编程情况

一.对二分算法理解 二分算法,又称折半算法,是应用分治策略的典型例子.二分查找主要对有序序列进行对所指定数字的查找,通过不断缩小搜查范围,在比较中间的数后对左右两个数组进行相同操作,以得到最终的带查找数字.时间复杂度logn,对数组较大时能显著提高程序效率. 二.算法代码 #include <iostream>using namespace std;int main(){ int n,x; cin >> n; if(1<=n<=100){  int a[n];  for

对二分思想的理解及结对编程

一.对二分法思想的体会 1.二分法是运用分治策略的典型例子,也称折半查找,充分利用了元素间的次序关系,是一种效率较高的查找方法.实现二分算法有递归和非递归两种方式. 2.基本思想:将n个元素分成大致相同的两半,取a[n/2]与x作比较.如果x=a[n/2],则找到x,算法终止:如果a<[n/2],则只在数组a的左半部分继续搜索x:如果x>a[n/2],则只在数组的右半部分继续搜索x. 3.代码实现: int BinarySearch(Type a[],const Type&x,int

第二章总结和结对编程情况

第二章总结 1.递归 1.1递归是什么:递归是自己定义自己,直接或间接地调用自己的算法. 1.2递归常见类型:多变元递归.多步递归.嵌套递归.联立递归. 1.3优点:可读性强,结构清晰,为调试提供很大便利: 缺点:运行效率较低,空间复杂度和时间复杂度都耗费比较大. 2.分治 2.1分治是什么:把一个问题分成若干个相同的子问题,对子问题进行求解. 2.2.分治思想三个阶段:一个较大问题划分为多个子问题.求解子问题.合并子问题的解,形成原始问题的解. 2.3时间复杂度:当 n = 1 时,T(n)

对二分法的学习体会以及关于结对编程的体验分享

1) 二分搜索技术 二分搜索算法是运用分治策略的典型例子.二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(logn)时间完成搜索任务. 问题描述:给定已排好序的n个元素a[0: n-1],现要在这n个元素中找出特定的元素x. 解决方法: a) 顺序搜索方法:逐个比较a[0: n-1]中元素,直至找出元素或搜索整个数组后确定x不在其中.该方法没有很好地利用n个元素已排好序这个条件,因此在最坏的情况下,顺序搜索方法需要O(n) 次比较. b) 二分搜索方法:将n个元素分成