【问题标题】:Is it Possible to Check Speacial Character in Binary search in java? [closed]是否可以在java中的二进制搜索中检查特殊字符? [关闭]
【发布时间】:2013-11-21 12:31:05
【问题描述】:

我的字符串缓冲区有“_@”。 .我有二进制搜索方法,它为 char '.' 返回 false。我找不到如何在二进制搜索中检查特殊字符。请帮助找出这个问题。

【问题讨论】:

  • 你能贴出findIn(StringBuffer sb, char c)的代码吗?
  • 我相信你在滥用二进制搜索。在下面检查我的答案。

标签: java binary-search-tree stringbuffer


【解决方案1】:

你调用了错误的函数。改成这样..

public static void main(String[] args) {
    StringBuffer b = new StringBuffer();
    b.append(" _ @ .");
    boolean isValid = false;
    isValid = isValueThere(b, '.');
    System.out.print(isValid);
}

isValueThere(b, '.'); 返回真。

【讨论】:

  • 只有在某些幸运的情况下,空格才会返回 true。
【解决方案2】:

如果我错了,请纠正我,但二进制搜索用于排序数组。

您正在尝试对字符数组 _ @ . 执行二进制搜索。
就 ASCII 码而言,它看起来像这样:[32][95][32][64][32][46]

So, when you call your function:
Low: 0 - Middle: 2 - High: 5
Seach: 46 - Actual: 32
Low: 3
Low: 3 - Middle: 4 - High: 5
Seach: 46 - Actual: 32
Low: 5
Low: 5 - Middle: 5 - High: 5
Found!!!
true

但是,当您取出空白并在"_@."上运行时

Low: 0 - Middle: 1 - High: 2
Seach: 46 - Actual: 64
High: 0
Low: 0 - Middle: 0 - High: 0
Seach: 46 - Actual: 95
High: -1
Not found!!!
false

总结一下:

如果您绝对确定您将在排序后的数组上运行搜索,那么这没问题。

但是,就像你的情况一样,如果你不能保证你会有排序数组,那么不要使用二进制搜索。

【讨论】:

  • 它返回false,我的问题是为什么不能搜索,是否可以用特殊字符搜索??
  • 它返回 true,但仅适用于这种特殊情况。这不是二分搜索的好用法。
  • 不,我相信你误解了我的意思。您可以搜索.。或@。或 unicode 表中的任何其他字符。这里的问题是您在 UNSORTED 字符数组上使用二进制搜索。二进制搜索用于 SORTED 数组。要么进行不同的搜索(例如线性搜索),要么对数组进行预排序。
  • ,它现在可以工作了,非常感谢......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2015-11-04
相关资源
最近更新 更多