首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python-VBA编程500例-030(入门级)

  • 25-03-03 04:44
  • 3981
  • 11167
blog.csdn.net

目录

1、搜索最近邻:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信

        搜索最近邻(Nearest Neighbour Search)在实际应用中有许多典型的场景,常见应用场景有:

1、电商推荐系统:在电商领域,根据用户的购买历史和偏好,通过搜索最近邻可以找到与其相似的其他用户。然后,系统可以向这些相似用户喜欢的商品进行推荐,实现个性化的购物体验。

2、医疗诊断:在医疗领域,最近邻搜索可以应用于疾病诊断。通过分析患者的症状和疾病历史,系统可以找到与其相似的患者群体,从而预测患者可能患有的疾病,为医生提供辅助诊断的依据。

3、金融风控:在金融领域,最近邻搜索可以用于风险评估。通过搜索与客户的信用记录和交易行为相似的客户群体,系统可以评估客户的信用风险,为金融机构提供决策支持。

4、图像识别:在计算机视觉领域,最近邻搜索可以应用于图像识别。通过比较图像的特征向量,系统可以找到与其相似的图像,从而实现分类识别、目标检测等任务。

5、社交网络分析:在社交网络领域,最近邻搜索可以用于社交关系分析。根据用户的社交行为和兴趣爱好,系统可以找到与其相似的用户,然后推荐相关的社交关系或内容,增强用户的社交体验。

        此外,最近邻搜索还可以应用于层次聚类、基于内容的图像检索等领域。通过比较数据点的相似度,可以形成具有独特特征的聚类,或者找到与查询图像最相似的图像集合。

        总的来说,搜索最近邻在各个领域都有着广泛的应用,为各种决策和推荐提供了有力的支持。随着技术的发展和数据量的增长,最近邻搜索的应用场景还将进一步拓展。

 

1、搜索最近邻:
1-1、Python:
  1. # 1.问题描述:
  2. # 在一个排序数组arr1中找到i,使得arr1[i]最接近目标数target_num,输出i.
  3. # 2.问题示例:
  4. # 给定排序数组arr1 = [3, 5, 6, 8, 10, 11, 24],目标数值target_num = 22,输出6,即arr1[6]最接近目标数值target_num 22.
  5. # 3.代码实现:
  6. class Solution:
  7. def find_closest_position(self, arr1, target_num):
  8. # 如果数组为空,则返回-1表示无法找到目标值位置
  9. if not arr1:
  10. return -1
  11. # 初始化搜索的起始和结束位置
  12. start, end = 0, len(arr1) - 1
  13. # 当起始位置加1小于结束位置时,进行二分查找
  14. while start + 1 < end:
  15. # 计算中间位置
  16. mid = start + (end - start) // 2
  17. # 根据中间值与目标值的大小关系,调整搜索范围
  18. if arr1[mid] < target_num:
  19. start = mid
  20. elif arr1[mid] > target_num:
  21. end = mid
  22. else:
  23. # 如果找到目标值,直接返回其位置
  24. return mid
  25. # 当搜索范围缩小到相邻两个元素时,比较目标值与这两个元素的差值
  26. # 返回差值较小的那个元素的位置
  27. if abs(target_num - arr1[start]) <= abs(arr1[end] - target_num):
  28. return start
  29. else:
  30. return end
  31. # 主函数
  32. if __name__ == '__main__':
  33. # 初始化数组和目标值
  34. arr1 = [3, 5, 6, 8, 10, 11, 24]
  35. target_num = 22
  36. # 创建Solution类的实例
  37. solution = Solution()
  38. # 输出输入的数组和目标值
  39. print("输入:", arr1, ",target =", target_num)
  40. # 调用方法并输出最接近目标值的位置
  41. print("输出:", solution.find_closest_position(arr1, target_num))
  42. # 4.运行结果:
  43. # 输入: [3, 5, 6, 8, 10, 11, 24] ,target = 22
  44. # 输出: 6
1-2、VBA:
  1. Rem 自定义函数,功能:搜索最近邻
  2. Function FindClosestPosition(arr1 As Variant, target_num As Double) As Variant
  3. Dim start_pos As Long ' 定义起始位置变量
  4. Dim end_pos As Long ' 定义结束位置变量
  5. Dim mid_pos As Long ' 定义中间位置变量
  6. ' 假设 arr1 是一个已排序的数组,注意,这个前提条件非常重要!
  7. ' 检查数组是否为空
  8. If IsEmpty(arr1) Or UBound(arr1) < LBound(arr1) Then
  9. ' 如果数组为空或没有元素,则返回-1
  10. FindClosestPosition = -1
  11. Exit Function
  12. End If
  13. ' 初始化搜索的起始和结束位置
  14. start_pos = LBound(arr1)
  15. end_pos = UBound(arr1)
  16. ' 检查目标值是否小于等于数组第一个元素
  17. If target_num <= arr1(start_pos) Then
  18. ' 如果是,则第一个元素的位置是最接近的
  19. FindClosestPosition = start_pos
  20. Exit Function
  21. End If
  22. ' 检查目标值是否大于等于数组最后一个元素
  23. If target_num >= arr1(end_pos) Then
  24. ' 如果是,则最后一个元素的位置是最接近的
  25. FindClosestPosition = end_pos
  26. Exit Function
  27. End If
  28. ' 使用二分查找寻找最接近目标值的位置
  29. While start_pos < end_pos
  30. ' 计算中间位置
  31. mid_pos = start_pos + (end_pos - start_pos) \ 2
  32. ' 根据中间值与目标值的大小关系,调整搜索范围
  33. If arr1(mid_pos) < target_num Then
  34. ' 如果中间值小于目标值,搜索范围调整为中间位置到结束位置
  35. start_pos = mid_pos + 1
  36. Else
  37. ' 如果中间值大于等于目标值,搜索范围调整为起始位置到中间位置
  38. end_pos = mid_pos
  39. End If
  40. Wend
  41. ' 当搜索范围缩小到相邻两个元素时,返回差值较小的那个元素的位置
  42. If Abs(target_num - arr1(start_pos)) <= Abs(target_num - arr1(end_pos - 1)) Then
  43. FindClosestPosition = start_pos
  44. Else
  45. FindClosestPosition = end_pos - 1
  46. End If
  47. End Function
  48. Rem 执行过程,功能:调用自定义函数FindClosestPosition,实现在排序数组中找到最接近目标数值的元素所在位置,在立即窗口中输出结果.
  49. Sub TestRun()
  50. Dim arr1 As Variant ' 定义排序数组
  51. Dim target_num As Double ' 定义目标数值
  52. Dim result As Variant ' 定义输出结果变量
  53. ' 初始化数组和目标值
  54. arr1 = Array(3, 5, 6, 8, 10, 11, 24)
  55. target_num = 22
  56. ' 调用函数并输出结果
  57. result = FindClosestPosition(arr1, target_num)
  58. ' 输出输入的数组和目标值
  59. Debug.Print "输入:(", Join(arr1, ", "), "),target =", target_num
  60. ' 输出最接近目标值的位置
  61. If IsNumeric(result) Then
  62. Debug.Print "输出:", result
  63. Else
  64. Debug.Print "输出:数组为空"
  65. End If
  66. End Sub
  67. '结果输出:
  68. '输入:( 3, 5, 6, 8, 10, 11, 24 ),target = 22
  69. '输出: 6

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,在立即窗口中输出结果。

2、相关文章:

2-1、Python-VBA编程500例-028(入门级) 

2-2、Python-VBA编程500例-029(入门级) 

2-3、Python-VBA编程500例-031(入门级)

2-4、Python-VBA编程500例-032(入门级) 

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60120 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/137384985"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top