java 模糊匹配 二分法_浅谈二分法查找和原始算法查找的效率对比

我就废话不多说了,大家还是直接看代码吧!

import java.text.MessageFormat;

public class AppTest {

static int length = 70000000;

static int[] array = new int[length];

static {

for (int i = 0; i < length; i++) {

array[i] = i;

}

}

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {

int target = (int) (Math.random() * length * 2);

long start_f1 = System.currentTimeMillis();

int index_f1 = findIndex(array, target);

long end_f1 = System.currentTimeMillis();

long time_f1 = end_f1 - start_f1;

long start_f2 = System.currentTimeMillis();

int index_f2 = findIndexByFor(array, target);

long end_f2 = System.currentTimeMillis();

long time_f2 = end_f2 - start_f2;

System.out.println(MessageFormat.format("目标数据:{0}\t二分法耗时:{1}\t普通方法耗时:{2}\t二分法结果:{3}\t普通方法结果:{4}",

target, time_f1, time_f2, index_f1, index_f2));

}

}

public static int findIndex(int[] arr, int target) {

return findIndex(arr, 0, arr.length, target);

}

public static int findIndex(int[] arr, int start, int end, int target) {

int middle = (start + end) / 2;

if (target == arr[middle]) {

return middle;

} else if (start > end ||

target < arr[0] ||

target > arr[arr.length - 1]) {

return -1;

} else if (target < arr[middle]) {

return findIndex(arr, start, middle - 1, target);

} else if (target > arr[middle]) {

return findIndex(arr, middle + 1, end, target);

}

return -1;

}

public static int findIndexByFor(int[] arr, int target) {

int index = 0;

for (int i : arr) {

if (i == target) {

return index;

}

index++;

}

return -1;

}

}

查找结果:

06001239369dee5575c298bcde04d0c8.png

总结:

总结过我们可以看出,二分法查找几乎是不耗时,所以方法是很重要的

补充知识:顺序查找与二分查找时间复杂度的比较

注意要点:通过System.currentTimeMills();来获取当前时间,来计算该算法运行运算时间 ​​​​​​​ 顺序查找的时间复杂度为O(n)

二分查找的时间复杂度为O(log(n))

但两者的运行时间的结果却千差万别,可知当计算量很大的情况下算法优化的必要性。

import java.util.Arrays;

public class Main {

public static int a[] = new int[10000*10000];

public static void main(String[] args) {

for(int i = 0; i < 10000* 10000; i ++) {

a[i] = i + 1;

}

int target = 10000 * 10000;

//计算顺序查找所用时间

long start = System.currentTimeMillis();

find(target);

long end = System.currentTimeMillis();

System.out.println(end - start + "ms");

//计算二分查找所用时间

start = System.currentTimeMillis();

Arrays.binarySearch(a, target);

end = System.currentTimeMillis();

System.out.println(end - start + "ms");

}

private static void find(int target) {

for(int i = 0; i < 10000 * 10000; i ++) {

if(a[i] == target) {

return;

}

}

}

}

运行结果:

55ms

0ms

以上这篇浅谈二分法查找和原始算法查找的效率对比就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值