二分查找算法可以适用于模糊查找吗

jasonhc 2010-12-17 06:48:35
有这样的需求:一组排序好的数据放在一个数组里,用模糊匹配条件可以匹配一块连续的数据,现在需要根据某个模糊匹配条件来找到对应的一组数据。这个算法应该怎么设计比较好呢?

目前的一种办法是用二分查找:先二分找到某一个匹配的元素(index为M),在(0,M)范围内进行多次二分,一直到找到上边界为止;下一步在(M,N)范围内进行多次二分,一直到找到下边界为止。这个方法会有问题吗?
...全文
136 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonhc 2011-01-10
  • 打赏
  • 举报
回复
非常感谢,我脑子是有些不太清醒了 ^_^。最终还是做成了先找两个边界(多次二分),只是为了某种情况下能提高点效率。

[Quote=引用 12 楼 sduxiaoxiang 的回复:]

排好序后同一条件的在一块啊
找到一个就相当于都找到了啊 就在它左边和右边啊
[/Quote]
sduxiaoxiang 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jasonhc 的回复:]
有些糊涂了。二分应该只能定位到那个范围内的某一项数据吧,怎么能正好定位到边界呢?
[/Quote]
排好序后同一条件的在一块啊
找到一个就相当于都找到了啊 就在它左边和右边啊
jasonhc 2010-12-19
  • 打赏
  • 举报
回复
有些糊涂了。二分应该只能定位到那个范围内的某一项数据吧,怎么能正好定位到边界呢?
luciferisnotsatan 2010-12-18
  • 打赏
  • 举报
回复
你的模糊匹配怎么个模糊匹配法?
二分查找只有找到和找不到两种结果
某某9 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jasonhc 的回复:]
能说具体一点吗,怎么能一次就找到某一个边界的位置,用什么算法?

引用 7 楼 bdmh 的回复:
两次,分别找上下边界的位置,然后取出中间的数
[/Quote]

二分查找啊。
查找两次,分别匹配上下界。
是这个意思吧?
jasonhc 2010-12-18
  • 打赏
  • 举报
回复

能说具体一点吗,怎么能一次就找到某一个边界的位置,用什么算法?

[Quote=引用 7 楼 bdmh 的回复:]
两次,分别找上下边界的位置,然后取出中间的数
[/Quote]
liuintermilan 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jasonhc 的回复:]
谢谢大家。说的不太清楚。举个例子:比如数据是字符串,需要找以T开始的所有字符串(也就是"模糊匹配条件可以匹配一块连续的数据")。当然实际情况要更复杂一些。
[/Quote]
我觉得用二分倒不是不行,但是对于查找字符串来说,应该是做索引更方便。
你的上下边界怎么确定,总要有阈值控制的。
bdmh 2010-12-18
  • 打赏
  • 举报
回复
两次,分别找上下边界的位置,然后取出中间的数
jasonhc 2010-12-18
  • 打赏
  • 举报
回复

怎么能直接定位到上或下边界呢,一次查找似乎不行吧。

[Quote=引用 5 楼 bdmh 的回复:]
其实可以分两次查找上边界和下边界,因为你的匹配范围肯定要有个范围的
[/Quote]
bdmh 2010-12-18
  • 打赏
  • 举报
回复
其实可以分两次查找上边界和下边界,因为你的匹配范围肯定要有个范围的
jasonhc 2010-12-18
  • 打赏
  • 举报
回复
谢谢大家。说的不太清楚。举个例子:比如数据是字符串,需要找以T开始的所有字符串(也就是"模糊匹配条件可以匹配一块连续的数据")。当然实际情况要更复杂一些。
liuintermilan 2010-12-17
  • 打赏
  • 举报
回复
其实不是很明白你的需求,你的模糊匹配的条件是什么样的?
sduxiaoxiang 2010-12-17
  • 打赏
  • 举报
回复
二分 找到合适的位置 再左右查找 知道找到不合适的 因为是排好序的 符合条件的数据在一起

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧