小编dra*_*ard的帖子

哈希表真的可以是O(1)吗?

哈希表可以实现O(1)似乎是常识,但这对我来说从来没有意义.有人可以解释一下吗?以下是两种情况:

答: 该值是一个小于哈希表大小的int.因此,该值是它自己的哈希值,因此没有哈希表.但如果有,那将是O(1)并且仍然是低效的.

B. 您必须计算值的哈希值.在这种情况下,查找数据大小的顺序为O(n).在你做O(n)工作之后,查找可能是O(1),但在我眼中仍然是O(n).

除非你有一个完美的哈希表或一个大的哈希表,否则每个桶可能有几个项目.因此,无论如何,它在某个时刻转变为一个小的线性搜索.

我认为哈希表很棒,但我没有得到O(1)的名称,除非它只是理论上的.

维基百科关于哈希表文章始终引用常量查找时间并完全忽略哈希函数的成本.这真是一个公平的衡量标准吗?


编辑:总结我学到的东西:

  • 这在技术上是正确的,因为哈希函数不需要使用密钥中的所有信息,因此可以是恒定时间,并且因为足够大的表可以将冲突降低到接近恒定的时间.

  • 在实践中确实如此,因为随着时间的推移,只要选择散列函数和表大小来最小化冲突,即使这通常意味着不使用常量时间散列函数,它也只会有效.

language-agnostic algorithm performance big-o hashtable

102
推荐指数
6
解决办法
4万
查看次数

Oracle sql merge要插入和删除但不能更新

有没有办法使用oracle merge来插入和删除但不更新?

我有一个表,表示与另一个表中的单个行相关的一组值.我可以通过删除所有值并添加回新集,或者通过有选择地删除一些并添加其他值来更改值集,但我有兴趣在可能的情况下将其作为单个语句.

这是一个更新的工作示例.为了使这项工作,我必须添加,dummy以便可以更新一个不在on条件中的列.有没有办法只删除和插入没有虚拟列来更新?

即使实际没有更新,on条件中的update set列也不会出现在列表中.

create table every_value ( the_value varchar2(32) );
create table paired_value ( the_id number, a_value varchar2(32) , dummy number default 0 );
-- the_id is a foreign_key to a row in another table

insert into every_value ( the_value ) values ( 'aaa' );
insert into every_value ( the_value ) values ( 'abc' );
insert into every_value ( the_value ) values ( 'ace' );
insert into every_value ( …
Run Code Online (Sandbox Code Playgroud)

sql oracle merge insert sql-delete

12
推荐指数
1
解决办法
4万
查看次数

如何用数字方式对javascript中的字符串进行排序

我想排序一个字符串数组(在javascript中),使得字符串中的数字组比较为整数而不是字符串.我并不担心签名或浮点数.

例如,结果应该["a1b3","a9b2","a10b2","a10b11"]不是["a1b3","a10b11","a10b2","a9b2"]

最简单的方法似乎是在数字组周围的边界上拆分每个字符串.是否有一个模式,我可以传递给String.split分割字符边界而不删除任何字符?

"abc11def22ghi".split(/?/) = ["abc","11","def","22","ghi"];

或者是否有另一种方法来比较不涉及拆分它们的字符串,也许通过用前导零填充所有数字组,使它们的长度相同?

"aa1bb" => "aa00000001bb", "aa10bb" => "aa00000010bb"

我正在使用任意字符串,而不是具有特定数字组排列的字符串.

编辑:

我喜欢/(\d+)/盖比的一个班轮来拆分阵列.如何向后兼容?

以可用于重建原始文件的方式解析字符串一次的解决方案比此比较函数更有效.没有一个答案处理一些以数字开头的字符串而其他字符串不处理,但这很容易补救,并且在原始问题中没有明确说明.

["a100","a20","a3","a3b","a3b100","a3b20","a3b3","!!","~~","9","10","9.5"].sort( function ( inA , inB ) {
    var                     result = 0;

    var                     a , b , pattern = /(\d+)/;
    var                     as = inA.split( pattern );
    var                     bs = inB.split( pattern );
    var                     index , count = as.length;

    if ( ( '' === as[0] ) === ( '' === bs[0] ) ) {
        if ( count > bs.length …
Run Code Online (Sandbox Code Playgroud)

javascript regex sorting split natural-sort

10
推荐指数
4
解决办法
1万
查看次数

在uiwebview中使用javascript将样式应用于文本范围

我在iPhone上的UIWebView中显示一些简单的样式文本作为html.它基本上是一系列段落,偶尔会有强烈或强调的短语.在运行时,我需要将样式应用于文本范围.

有一些类似的场景,其中一个突出显示搜索结果.如果用户搜索了"某事",我想更改单词出现后的背景颜色,然后恢复原始背景.

是否可以使用javascript将样式应用于文本范围?其中一个关键部分也是能够取消设置风格.

似乎有两条可能的路径可供遵循.一个是修改Objective-C中的一些html并通过javascript传递它作为某个容器的新innerHTML.另一种方法是使用javascript直接操作DOM节点.

我可以操作html,但这在Objective-C中听起来很乏味,所以如果这是一种合理的方法,我宁愿操纵DOM.我不熟悉javascript和DOM,所以我不知道它是否是一种合理的方法.

我写了一些例程来在文本范围和具有偏移的节点范围之间进行转换.因此,如果我从文本范围100-200开始并且从一个段落开始到第三个结束,我可以获得文本节点和表示给定文本范围的节点内的偏移量.我只需要一种方法将文本节点拆分为文本中的偏移量.目前我只是将样式应用于包含文本范围的段落.

几点说明:

  • 请直接javascript,没有像jquery这样的外部框架.
  • 永远不需要将更改写入磁盘.
  • 更改应该是可撤消的或至少是可移除的.
  • 要应用的样式已存在于css文件中.
  • 它需要在iPhone 3.0中工作并向前发展.
  • 所有源文件都随应用程序一起提供.
  • 请详细说明.

谢谢你的任何建议.

html javascript css iphone uiwebview

8
推荐指数
1
解决办法
4570
查看次数

UINavigationController后退按钮一半在iPad横向工作

在带有UINavigationController的iPad应用程序中,一切都在纵向模式下工作,但在横向模式下,后退按钮有时只能返回半个级别.也就是说,在第一次按下时,标题栏会动画,好像它正在弹出一个控制器,而在第二次按下时,它会弹出内容弹出的动画.

有没有人找到解决方案?这个问题中的矛盾解决方案没有帮助.我在导航控制器中有一个shouldAutorotate方法但没有其他方法.

-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)inOrientation {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

实际上,第一次单击会弹出内容,第二次单击会弹出导航栏.

orientation uinavigationcontroller ipad

6
推荐指数
1
解决办法
1713
查看次数

在对半色调漫画图像进行下采样时减少莫尔条纹

在 iPhone 或 iPad 上实时缩放期间对半色调漫画书图像进行下采样时,如何减少莫尔效应?

我正在写一个漫画书查看器。提供更高分辨率的图像并允许用户在阅读漫画书时放大会很好。但是,我的客户不喜欢摩尔纹效果,如果在缩放时有明显的摩尔纹伪影(当然有),则不允许使用此功能。

将图像修改为不易受摩尔纹影响只有在修改不可察觉时才有效。模糊是被明确禁止的,任何去除心爱的半色调点的东西也是如此。

图像是黑白半色调和线条艺术。原件为 600 dpi,但我们随应用程序提供的内容最多只有 600 dpi,因此高度可能为 2500 像素或更低。

那么我的选择是什么?如果我编写自定义下采样算法,在这些设备上的实时性是否足够快?我还有其他技巧吗?仅仅避免具有最多视觉莫尔效应的尺寸比例会起作用吗?

当您放大时,肯定会出现莫尔效应最差的峰值。有没有办法计算这些点是什么,然后放大到附近没有那么糟糕的比例?

欢迎任何建议。我在图像和信号处理方面的经验很少,但我很享受学习的机会。我对小波和锐度以及其他术语一无所知,所以请详细说明。

编辑:

至少现在我们正在使用动态缩放。我们将支持放大到完全放大,但不支持任意缩放。我希望将来能重新审视这个问题。

signal-processing image-processing antialiasing downsampling

5
推荐指数
1
解决办法
1446
查看次数