我正在寻求了解rsync算法的工作原理.经过一番阅读和思考,我想出了一个我认为算法失败的情况.我试图找出在实际实现中如何解决这个问题.
考虑这个例子,其中A是接收者,B是发送者.
A = abcde1234512345fghij
B = abcde12345fghij
Run Code Online (Sandbox Code Playgroud)
如您所见,唯一的变化是12345已被删除.
现在,为了让这个例子变得有趣,让我们选择一个5字节的块大小(字符).使用弱校验和散列发送方的值会给出以下值列表.
abcde|12345|fghij
abcde -> 495
12345 -> 255
fghij -> 520
values = [495, 255, 520]
Run Code Online (Sandbox Code Playgroud)
接下来我们检查A中是否有任何哈希值不同.如果有匹配的块,我们可以跳到该块的末尾进行下一次检查.如果有一个不匹配的块,那么我们发现了一个区别.我会逐步完成这个过程.
abcde -> 495(是的,所以跳过)12345 -> 255(是的,所以跳过)12345 -> 255(是的,所以跳过)fghij -> 520(是的,所以跳过)由于在值列表中找到了每个哈希值,因此我们得出结论:A和B是相同的.在我看来,这不是真的.
在我看来,只要有多个块共享相同的哈希值,就会发生这种情况.我知道我已经跳过了计算和检查强散列的步骤,但这不会产生任何影响,因为第二个和第三个块完全相同
我错过了什么?
我曾经写过一个很好玩俄罗斯方块的俄罗斯方块AI.我使用的算法(在本文中描述)是一个两步过程.
在第一步中,程序员决定跟踪对问题"感兴趣"的输入.在俄罗斯方块中,我们可能有兴趣跟踪连续存在的差距,因为最小化差距可以帮助更容易地放置未来的碎片.另一个可能是平均柱高,因为如果您即将失败,承担风险可能是个坏主意.
第二步是确定与每个输入相关联的权重.这是我使用遗传算法的部分.只要根据结果随时间调整权重,任何学习算法都会在此处执行.我们的想法是让计算机决定输入与解决方案的关系.
使用这些输入及其权重,我们可以确定采取任何行动的价值.例如,如果将直线形状一直放在右列中将消除4个不同行的间隙,那么如果其重量很高,则此动作可以获得非常高的分数.同样地,将其平放在顶部可能实际上会导致间隙,因此动作得分较低.
我一直想知道是否有办法将学习算法应用到第一步,在那里我们找到"有趣的"潜在输入.似乎可以编写一种算法,其中计算机首先学习哪些输入可能有用,然后应用学习来权衡这些输入.之前有过这样的事吗?它是否已经在任何AI应用程序中使用?
我正在使用以下列表理解:
resources = [obj.get("file") for obj in iterator if obj.get("file") != None]
Run Code Online (Sandbox Code Playgroud)
有没有办法"缓存" obj.get("file")在if语句中检查它的值,以便它get在生成返回列表时不必再次调用obj?
创建不同引用向量的最简单方法是什么?
使用(repeat 5 (ref nil))将返回一个列表,但它们都将引用相同的ref:
user=> (repeat 5 (ref nil))
(#<Ref@16ef71: nil> #<Ref@16ef71: nil> #<Ref@16ef71: nil> #<Ref@16ef71: nil> #<R
ef@16ef71: nil>)
Run Code Online (Sandbox Code Playgroud)
结果相同(replicate 5 (ref nil)):
user=> (replicate 5 (ref nil))
(#<Ref@1d88db7: nil> #<Ref@1d88db7: nil> #<Ref@1d88db7: nil> #<Ref@1d88db7: nil>
#<Ref@1d88db7: nil>)
Run Code Online (Sandbox Code Playgroud) 我知道Oldie但是好东西.这个问题被问了很多次,但我没有得到明确的答案.可伸缩的背景图像,最好只有CSS,如果必须的话,愿意使用jQuery支持.我遇到的一个问题(即使用CSS3背景图像)是图像下方的空白空间,当它的高度小于浏览器窗口高度时.(例如:http://css-tricks.com/examples/ImageToBackgroundImage/)
这就是我想要完成的事情:
以下是一些说明这些目标的例子(尽管我认为可以做得更好):
谢谢你,谢谢你,谢谢你.
我有一个结构,只包含我已分配的内存指针.有没有办法以递归方式释放每个指针而不是每个指针都是免费的?
例如,假设我有这样的布局:
typedef struct { ... } vertex;
typedef struct { ... } normal;
typedef struct { ... } texture_coord;
typedef struct
{
vertex* vertices;
normal* normals;
texture_coord* uv_coords;
int* quads;
int* triangles;
} model;
Run Code Online (Sandbox Code Playgroud)
在我的代码中我malloc每个结构创建一个模型:
model* mdl = malloc (...);
mdl->vertices = malloc (...);
mdl->normals = malloc (...);
mdl->uv_coords = malloc (...);
mdl->quads = malloc (...);
mdl->triangles = malloc (...);
Run Code Online (Sandbox Code Playgroud)
可以直接释放每个指针,如下所示:
free (mdl->vertices);
free (mdl->normals);
free (mdl->uv_coords);
free (mdl->quads);
free (mdl->triangles);
free (mdl);
Run Code Online (Sandbox Code Playgroud)
有没有办法可以递归迭代mdl中的指针而不是在每个元素上调用free?
(实际上,为每一个编写free()几乎没有任何工作,但它会减少代码重复并且对于学习有用)
我知道在C中,最好不要强制转换它的返回值malloc().我已经读过,malloc()如果不包含,编译器会假定返回一个int stdlib.h.当然,如果你试图隐式地将一个int分配给一个不是int的东西,那么它会产生一个错误,但是这个错误可能会被一个显式的强制转换所掩盖 - 因此有明确的强制转换的危险malloc().
对于我创建的任何函数,如果该函数不存在,那么编译器会告诉我.为什么编译器假设malloc()即使你没有包含它也会返回int stdlib.h?malloc()在包括之前,不应该保持未定义stdlib.h吗?
当我使用面法线在OpenGL中点亮我的人体模型时,每个面都在模型上的位置非常明显.使用顶点法线,照明变得相当平滑但仍然明显.是否有任何技术可用于平滑有机模型而无需添加额外的顶点(例如细分)?
我有类似的文本文件
first line
line nr 2
line three
Run Code Online (Sandbox Code Playgroud)
等等
我想生成
"first line",
"line nr 2",
"line three",
Run Code Online (Sandbox Code Playgroud)
我想知道如何在python中执行此操作,或者如果它更容易/更快,可能在bash中执行此操作.我知道打开文件有不同的代码,在python(?)中只读取一行不同但我不确定在这种情况下使用哪个选项,更重要的是,如何添加这些字符.任何建议都会有帮助.
我正在寻找一种平稳增加或减少圆周运动速度的方法.
使用圆的参数方程,我可以随时间移动圆中的对象:
x = center_x + radius * sin(time * speed)
y = center_y + radius * cos(time * speed)
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于我不能简单speed = speed + 1地加速对象,因为它会导致不稳定的运动.这是有道理的,因为基于绝对值而不是相对于对象的先前位置,每帧重新计算x和y值.
另一种方法可能是使用表示对象速度的向量,然后对向量应用圆周运动:
v_x = radius * sin(time * speed)
v_y = radius * cos(time * speed)
x = x + v_x
y = y + v_y
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,如果我改变速度,那么半径将增大或缩小.这是有道理的,因为运动是相对于当前位置的,所以如果我改变速度,基本上会跳过时间.
我能想到的一个可能有用的实现是使用从对象指向圆心的向量.然后我可以通过使用垂直向量计算对象位置处圆的切线,对其进行归一化并按速度进行缩放.我还没有实现这个,因为对于像这样的问题似乎有些过分,所以如果存在更简单的解决方案,请告诉我.谢谢!