我正在hash table
上进行在线讲座,我想确认一下我对hash table
的理解。
我了解hashing
将使用m
函数将所有可能密钥的范围缩小到集chaining
并使用collisions
来解析m
}}
我似乎无法想象它的dict()
部分。假设我在python
中创建了一个空的python
。 var xml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:v1=\"http://openclinica.org/ws/studySubject/v1\" xmlns:bean=\"http://openclinica.org/ws/beans\">"
+"<soapenv:Header>"
+"<wsse:Security soapenv:mustUnderstand=\"1\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">"
+"<wsse:UsernameToken wsu:Id=\"UsernameToken-27777511\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">"
+"<wsse:Username>x</wsse:Username>"
+"<wsse:Password>y</wsse:Password>"
+"</wsse:UsernameToken>"
+"</wsse:Security>"
+"</soapenv:Header>"
+"<soapenv:Body>"
+"<v1:importRequest>"
+"<ODM>"
+"<ClinicalData StudyOID=\"S_PROSPER2\" MetaDataVersionOID=\"v1.0.0\">"
+"<SubjectData SubjectKey=\"SS_UU001\">"
+"<StudyEventData StudyEventOID=\"SE_QUESW4\" StudyEventRepeatKey=\"0\">"
+"<FormData FormOID=\"F_RANDANDQUEST_11\">"
+"<ItemGroupData ItemGroupOID=\"IG_RANDA_UNGROUPED\" ItemGroupRepeatKey=\"1\" TransactionType=\"Insert\">"
+"<ItemData ItemOID=\"I_RANDA_RAND01\" Value=\"1\"/>"
+"<ItemData ItemOID=\"I_RANDA_RAND02\" Value=\"1\"/>"
+"<ItemData ItemOID=\"I_RANDA_RAND03\" Value=\"1\"/>"
+"<ItemData ItemOID=\"I_RANDA_RAND04\" Value=\"1\"/>"
+"</ItemGroupData>"
+"</FormData>"
+"</StudyEventData>"
+"</SubjectData>"
+"</ClinicalData>"
+"</ODM>"
+"</v1:importRequest>"
+"</soapenv:Body>"
+"</soapenv:Envelope>";
var options =
{
"method" : "post",
"contentType" : "text/xml; charset=utf-8",
"payload" : xml
};
var result = UrlFetchApp.fetch("http://89.221.253.174:8080/OpenClinica-ws/ws/data/v1/dataWsdl.wsdl", options);
Logger.log(result);
是否会创建一个包含预定义空闲插槽数的表?
答案 0 :(得分:2)
可以在2017年的Pycon演讲Modern Python Dictionaries A confluence of a dozen great ideas中找到有关如何实现Python字典的概述。
据我所知,哈希表将使用散列函数将所有可能密钥的范围缩小到集合m,并使用链接来解决冲突。 ......我似乎无法想象它的m部分。
最简单的可视化是m == 2
,因此散列将键分为两组:
>>> from pprint import pprint
>>> def hash(n):
'Hash a number into evens or odds'
return n % 2
>>> table = [[], []]
>>> for x in [10, 15, 12, 41, 80, 13, 40, 9]:
table[hash(x)].append(x)
>>> pprint(table, width=25)
[[10, 12, 80, 40],
[15, 41, 13, 9]]
在上面的例子中,八个键全部分为两组(平均值和赔率)。
该示例也适用于较大的 m 值,例如m == 7
:
>>> table = [[], [], [], [], [], [], []]
>>> for x in [10, 15, 12, 41, 80, 13, 40, 9]:
table[x % 7].append(x)
>>> pprint(table, width=25)
[[],
[15],
[9],
[10, 80],
[],
[12, 40],
[41, 13]]
如您所见,上面的示例有两个空插槽和一个碰撞插槽。
假设我在python中创建一个空的dict()。 python是否创建了一个包含一些预定数量的空条目的表?
是的,Python为空表创建了八个插槽。在Python的源代码中,我们在cpython/Objects/dictobject.c中看到#define PyDict_MINSIZE 8
。