我正在尝试编写一个使用哈希表来存储不同单词的C程序,我可以使用一些帮助.
首先,我创建一个哈希表,其中素数的大小最接近我必须存储的单词的数量,然后我使用哈希函数来查找每个单词的地址.我从最简单的功能开始,将字母加在一起,结果是88%的碰撞.然后我开始尝试该功能,发现无论我改变它,碰撞都不会低于35%.现在我正在使用
unsigned int stringToHash(char *word, unsigned int hashTableSize){
unsigned int counter, hashAddress =0;
for (counter =0; word[counter]!='\0'; counter++){
hashAddress = hashAddress*word[counter] + word[counter] + counter;
}
return (hashAddress%hashTableSize);
}
Run Code Online (Sandbox Code Playgroud)
这只是我提出的随机功能,但它给了我最好的结果 - 大约35%的碰撞.
过去几个小时我一直在阅读有关散列函数的文章,我尝试使用一些简单的函数,比如djb2,但是所有这些都给了我更糟糕的结果.(djb2导致了37%的碰撞,这是'更糟糕的是,但我期待更好而不是更糟糕的事情)我也不知道如何使用其他更复杂的一些,例如murmur2,因为我不知道参数是什么(关键,len ,种子)他们接受了.
即使使用djb2,或者我做错了什么,获得超过35%的碰撞是正常的吗?什么是关键,len和种子价值?
我已经创建了一个模块,接受一个连线[4:0]作为输入,我正在使用这个模块的几个实例,但每当我传递一个包含的值时,我就会得到"实例端口表达式中的语法错误" AF.
例如
key_schedule i1(09); // works
key_schedule i1(0A); // doesn't work
key_schedule i1(15); // works
key_schedule i1(1D); // doesn't work
Run Code Online (Sandbox Code Playgroud)
如果有人知道什么是错的,我会感激他们的帮助.
另外,如果我传递的话会发生什么,例如,值为"C",但我也有一条叫C的线?
谢谢.
我正在尝试使用table.SpacingBefore在我的PDF文件中的表格之前放置一些空格,但它不起作用.
我找到了iTextSharp table.SpacingBefore不工作 ,这是完全相同的问题,但解决方案似乎没有工作.
这是我的一些代码:
header.SpacingBefore = 150f;
Paragraph paragraph = new Paragraph();
paragraph.Leading = 0f;
doc1.Add(paragraph);
doc1.Add(header);
Run Code Online (Sandbox Code Playgroud)
结果是:

添加非空段落
Paragraph paragraph = new Paragraph(" TEXT ");
Run Code Online (Sandbox Code Playgroud)
产生这个:
