Excel VBA的查找与二进制搜索有多好/多快?我的平台是Office 11 | 2003,我将在三张值上搜索A列的字符串.行总数~14万
如果值得我参考哪个库和函数进行排序然后进行二分查找?据报道,二进制搜索字符串/文本存在潜在问题.
......必须注意一件事.使用带有sortedtext的二进制搜索公式需要谨慎. Aladin A.,Excel MVP
Excel查找:
Worksheets(1).Range("A:A").Find("PN-String-K9", LookIn:=xlValues, LookAt:=xlWhole)
Run Code Online (Sandbox Code Playgroud) 我想在Perl中实现二进制搜索算法.我的'数组'按递减顺序排序(不是实际数组,而是获取索引并返回值的函数).问题是可能存在一系列相同的值.如果我的搜索值在这样的范围内,我想返回包含它的第一个索引.
这就是我写的:
# get_val should be a *decreasing* function for idexes $i in min..max,
# formally: for any $i,$j s.t. $max>=$i>$j>=$min :
# $get_val_subref($i, $extra) <= $get_val_subref($j, $extra)
# min and max are the inclusive boundaries for the search
# get_val sub should get an index in min..max and an extra data reference, and return
# the value for the given index
# returns the smallest index $i in min..max for which $get_val_subref($j, $extra)
# returns $searched_val, or undef if …Run Code Online (Sandbox Code Playgroud) 我在磁盘中有一个巨大的设置数据记录,它按照某些键排序.数据一次被读入一个块(数千条记录).我必须搜索并显示与键匹配的所有记录.我在想一些基于二进制搜索的算法,但我在这里有一些限制.
有人可以帮我设计一个可以在C++中运行的有效策略.使用线性搜索方法是否有效.
+---+
| 1 | Block1
| 3 |
| 3 |
| 4 |
+---+
| 4 | Block2
| 6 |
| 7 |
| 8 |
+---+
| 8 | Block3
| 8 |
| 8 |
| 8 |
+---+
| 8 | Block4
| 14|
| 15|
| 16|
+---+
Run Code Online (Sandbox Code Playgroud)
我试图从一组网站(其中数千个)获取内容页面中的联系信息.在我挠头之前,我想问过像你这样的专家.我需要的只是地址,电子邮件ID,电话号码和联系人信息(如果有).
我想你已经理解了这个问题.是的,它是格式化...因为网站没有标准格式,所以很难确定我需要的确切信息.有些网站设计有flash联系我们页面,其他一些网站将联系信息设计为带有自定义字体的图像类型.
并且欢迎提示/想法/建议......
谢谢....
我正在阅读有关在排序的字符串数组中搜索(范围)字符串的内容.
它说:
如果要查找以"h"开头的所有字符串,可以对字符串"h"和"h\uFFFF"运行二进制搜索.这给出了以"h"开头的所有键的频带的所有索引.请注意,二进制搜索可以返回索引所在的索引,即使它实际上不在数组中也是如此.
我对这一段不明白.
h\uFFFF它是如何帮助/用于二进制搜索的,并且最后的句子也意味着即使这个搜索也有问题?
有什么帮助可以理解这里的内容吗?
这个问题经常在StackOverflow上重复出现,但我已经阅读了所有以前的相关答案,并对问题略有不同.
我有一个包含4.75亿行相同大小的23Gb文件,每行包含一个40个字符的哈希码,后跟一个标识符(一个整数).
我有一个传入的哈希码流 - 总共有数十亿个 - 对于每个传入的哈希码,我需要找到它并打印出相应的标识符.这项工作虽然很大,但只需要完成一次.
该文件太大,我无法读入内存,因此我一直尝试以下列方式使用map:
codes = (char *) mmap(0,statbuf.st_size,PROT_READ,MAP_SHARED,codefile,0);
Run Code Online (Sandbox Code Playgroud)
然后我只是根据代码中的地址使用地址算法进行二进制搜索.
这似乎开始工作得很漂亮,并在几秒内产生几百万个标识符,使用100%的cpu,但是经过一些看似随机的时间,它会减慢到爬行的速度.当我使用ps查看进程时,它已使用100%的cpu从状态"R"更改为使用1%cpu的状态"D"(磁盘绑定).
这是不可重复的 - 我可以在相同的数据上再次启动该过程,并且可能在"慢速爬行"发生之前运行5秒或10秒.昨晚一次,在此之前我差不多花了一分钟.
一切都是只读的,我没有尝试任何写入文件,我已经停止了机器上的所有其他进程(我控制).它是一台现代的Red Hat Enterprise Linux 64位机器.
有谁知道为什么这个过程变得磁盘受限以及如何阻止它?
更新:
感谢大家的回答,以及您的想法; 之前我没有尝试过所有各种改进,因为我想知道我是否以某种方式错误地使用了mmap.但答案的要点似乎是,除非我能将所有东西都挤进记忆中,否则我将不可避免地遇到问题.所以我将哈希码的大小压缩到没有创建任何重复项的前导前缀的大小 - 前15个字符就足够了.然后我将生成的文件拉入内存,并分别运行大约20亿个传入的哈希码.
假设已经给出了一个数组并且想要在该数组中找到元素,那么如何使用二进制搜索搜索该数组中的元素,并且给定的数组已经排序并且数组的大小未知.可以应用线性搜索,但我试图找出比线性算法更快的搜索.
我在周一参加了Java编程,并通过了它.我今天刚拿到了分级硬拷贝,我的导师说我应该使用Sherwood二进制搜索算法而不是常规二进制搜索.有没有人有这个算法的模板?我尝试在网上搜索它,但只获得它的含义,而不是实际的模板或副本的副本,所以我可以运行它.
感谢死灵法师我让它工作,看看为什么他可能想要它.
对于整数数组,整数元素的超越者是其右侧比它大的元素.
例如,{10,3,4,5,2}超越者3是4和5,并且10没有任何超越者.
所以最大超越数量问题是
给定一个整数数组
超出最大数量的超越者
基本上,我们需要获得每个元素的超越数量,最后输出它们的最大值.
例如,
surpassers的最大数量{10,3,4,5,2}为2的3有2个surpassers.
我想知道是否O(nLogn)存在使用二进制搜索的解决方案.
我得到了这个问题,因为" 功能算法设计珍珠 "一书中的第2章说:
在这颗珍珠中,我们解决了Martin Rem(1988a)的一个小编程练习.虽然Rem的解决方案使用二分搜索,但我们的解决方案是另一种分而治之的应用.
虽然我得到了功能解决方案,但我想不出一个二进制搜索数组.
有任何想法吗?
例如,我们有
{2,2,-1},
when k = 0, return -1.
when k = 3, return 3.
Run Code Online (Sandbox Code Playgroud)
这甚至是棘手的,因为我们有负数和一个额外的变量k.k可以是任何值,负数,不做任何假设.
我不能参考https://en.wikipedia.org/wiki/Maximum_subarray_problem和https://www.youtube.com/watch?v=yCQN096CwWM来解决这个问题.
有谁能够帮我?更好地使用Java或JavaScript.
这是最大的经典算法o(n)(无变量k):
public int maxSubArray(int[] nums) {
int max = nums[0];
int tsum = nums[0];
for(int i=1;i<nums.length;i++){
tsum = Math.max(tsum+nums[i],nums[i]);
max = Math.max(max,tsum);
}
return max;
}
Run Code Online (Sandbox Code Playgroud) algorithm queue dynamic-programming binary-search kadanes-algorithm