(三) 蛮力法

        蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。

蛮力法特性:

        (1)理论上,蛮力法可以解决可计算领域的各种问题。

        (2)蛮力法经常用来解决一些较小问规模的问题。

        (3)对于一些重要的问题(如排序、查找、串匹配),蛮力法可以设计一些合理的算法,这些算法具有实用价值,而且不受输入规模的限制。

        (4)蛮力法可以作为某类问题时间性能的下界,来衡量同样问题的其他算法是否具有更高的效率。


查找问题中使用蛮力法。


        顺序查找:

        是指在查找集合中一次查找值为k的元素,若查找成功,则给出元素在查找集合中的位置;若查找失败,则给出失败信息。

        【想法】:将查找集合放在一维数组中,然后从数组的一端向另一端逐个将元素与带查找值进行比较,若相等,则查找成功,给出该元素在查找中的序号;若整个数组检测完仍未找到与带差值相等的元素,则查找失败,给出失败标志0。我们在查找过程中还要注意下标是否越界的问题。

        算法的实现方法一:

        int SeqSearch1(int r[] ,int n, int k) //数组r[1] r[n]中存放查找集合。
        {
                int i = n;
               
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
凸包问题是计算凸多边形的问题,蛮力是一种朴素的算,它的时间复杂度为O(n^2)。下面是基于C语言实现的蛮力求解凸包问题的代码: ```c #include <stdio.h> typedef struct { int x; int y; } Point; int direction(Point a, Point b, Point c) { return (c.y - a.y) * (b.x - a.x) - (b.y - a.y) * (c.x - a.x); } void findConvexHull(Point p[], int n) { int i, j, k, count = 0; for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { int flag = 1; for (k = 0; k < n; k++) { if (k != i && k != j) { if (direction(p[i], p[j], p[k]) > 0) { flag = 0; break; } } } if (flag) { printf("(%d,%d) ", p[i].x, p[i].y); printf("(%d,%d) ", p[j].x, p[j].y); count++; } } } if (count == 0) { printf("凸包不存在\n"); } } int main() { Point p[] = {{0, 0}, {0, 1}, {1, 0}, {1, 1}, {2, 1}, {2, 2}, {1, 2}}; int n = sizeof(p) / sizeof(p[0]); findConvexHull(p, n); return 0; } ``` 该代码采用了重循环,分别枚举所有可能的点对和第个点,判断它们是否构成凸包的一条边。其中,direction函数用来计算个点之间的方向关系,如果方向为正,则表示个点按照逆时针方向排列,否则表示按照顺时针方向排列。如果第个点在点对的左侧,则说明这条边不是凸包的边。如果所有第个点都在点对的右侧,则这条边是凸包的一条边。 以上代码是一种朴素的实现方式,时间复杂度较高,但在数据规模较小的情况下,可以得到正确的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值