| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3051 人关注过本帖, 1 人收藏
标题:二分法查找,进来帮帮我吧
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 10楼 蚕头燕尾
表示没看懂你想表达什么。数目标值的个数与排序有什么关系吗?这个东西的应用很广泛,稍微扩展一下就可以用于求集合中某个范围内的数据元素有多少,在统计学方面这非常常用。

还有,不是在二分法里加这个东西,而是在这个东西里加二分法,有序是应用二分法的前提。

如果学了二分法却只会在一堆数里找一个确定值,那这学的就太死板了。

听说过三分法么?

重剑无锋,大巧不工
2013-08-06 21:45
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
#include<stdio.h>
int main()
{
    int element_count(int * set, int len, int e);

    int set[10]={1,2,3,4,5,5,5,5,8,9};

    printf("%d",element_count(set,10,5));
}
int element_count(int * set, int len, int e)
{
    int mid,low,high;
    int num=0;
    int i;

    low=0;
    high=len-1;
    while (low<=high)
    {
        mid=(low+high)/2;
        if(set[mid]==e)
        {
            for(i=low;i<=high;i++)
            {
                if(set[i]==e)
                    num++;
            }
            return num;

        }
        else if(set[mid]>e)
        {
            high=mid-1;
        }
        else
        {
            low=mid+1;
        }

    }

}

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 21:53
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
不知道B版主的问题是不是我写的代码的这个意思?

但是对版主说的三分法确实很好奇,让我先想想,

既然有二分,三分应该是同样道理的。。。。

我想想,想不出的话版主就再引导一下哈

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 21:56
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
略微思考了一下三分法的思路,感觉有点复杂,估计落实到代码上也不会简单到哪里去。。

从算法复杂度考虑,也不会在数量级上有所突破,估计也就是系数能有所改善,

要真是得写代码,还真是个细心的事儿,一时半会儿写不出,得好好思考着写,否则会出错。



学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 22:03
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你的代码不满足要求因为你只部分地使用了二分法,中间还插了一段顺序遍历。要求 必须/完全/只 使用二分法。

有兴趣你可以先查查三分法的相关资料。学基础算法,光知道某个算法怎么实现是不够的(甚至是没用的),更重要的是知道这个算法能用在哪里。

三分法也有它特定的应用环境。

重剑无锋,大巧不工
2013-08-06 22:12
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
额,话说人呢??

感觉像是自己在玩单机似得。。。

好吧,不管了,版主看见之后发个话哈,我继续看那个三分法

刚刚百度了一下,果然不是什么省油的灯(至少对现在的我来说)。。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 22:12
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
慢慢看吧,不要过早地下什么结论,你14楼那些结论也不对。你还不知道三分法能干什么呢。

我先歇了

[ 本帖最后由 beyondyf 于 2013-8-6 22:20 编辑 ]

重剑无锋,大巧不工
2013-08-06 22:17
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 17楼 beyondyf
鉴于我特差的理解能力,我想确认一下题目要求:

1、版主要求的是从“非降序”的数组里查找,也就是说可能是所有数组元素都一样的“不升不降”的那种数组,比如说一个有10个元素的数组,数值全部是5,然后查找5的个数,函数返回值就得是10,这样理解对吧。

2、完全用“二分法”,意思就是说,不得在任何地方,哪怕只剩三个待筛选的数值的时候,也不能使用其他查找算法是吧。

3、先理解三分法对这个题有帮助吗?

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 22:24
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
理解能力差真的不是我的错。。。


修炼不到家呐。。。



学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 22:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 18楼 蚕头燕尾
1、对
2、是的
3、就是随口一说拓展一下大家的知识面,跟这个问题没什么关系

重剑无锋,大巧不工
2013-08-06 22:33
快速回复:二分法查找,进来帮帮我吧
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029158 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved