查找算法——抽签算法(假如我告诉你:不管多少元素,都只需要比对一次,你信还是不信?)

简介: 查找算法——抽签算法(假如我告诉你:不管多少元素,都只需要比对一次,你信还是不信?)

2199d95f19b94e6a8ca147d44897f63a.png

抽签算法的基本思想

抽签是中国的民间习俗,是占卜的其中一种形式。那么可以抽签的形式随机找出序列中的元素进行比对,如果运气足够好,那么不管多少元素,都只需要比对一次,这就是这个算法最神秘之处,用阳寿来查找。

步骤image.png

过程演示

在序列[3,44,38,5,47,15,36,26,1,2] 中查找 2

第一种结果:查找 1 次5f6cd4ded3819aaf9a59bd3e946313d3.png

第二种结果:查找 18 次5e3af585a92b9968214c8b97abf3d7dc.png

第三种结果:查找 3 次08ee3ac8b4418f37e0ac3a359c8f749f.png


算法代码

#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;
//抽签算法 voidDrawAlgorithm(intnums[],intnum,intn){
srand((int)time(0));                //产生随机种子 intcount=0,randNum,bound=n*n;      
while(true&&count<bound){           //当寻找次数到达 bound 时停止 count++;
randNum=rand()%n;               //生成随机数 if(nums[randNum]==num){         
break;                      //如果找到 num,则 break 退出循环         }
    }
cout<<"已找到 "<<num<<",寻找次数 count:"<<count;
} 
//打印数组 voidprintNum(intnumbers[],intn){
for(inti=0;i<n;i++){
cout<<numbers[i]<<" ";
    }
cout<<endl; 
}
intmain()
{
intnumbers[10]={3,44,38,5,47,15,36,26,1,2};
intn=sizeof(numbers)/sizeof(numbers[0]);   //数组长度 cout<<"序列为:"; 
printNum(numbers,n);        //打印数组 DrawAlgorithm(numbers,2,n);     //调用 DrawAlgorithm 函数在 numbers 序列中进行抽签查找 2 return0;
}

算法性能分析image.png


目录
相关文章
|
8月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
56 1
|
3月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
67 3
|
5月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
58 4
|
7月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
30 0
|
7月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
73 1
|
7月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
7月前
|
算法 Java
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
70 2
|
7月前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
91 3
|
7月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
下一篇
开通oss服务