Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是散列函数吗?python_Python_Function_Hash - Fatal编程技术网

这是散列函数吗?python

这是散列函数吗?python,python,function,hash,Python,Function,Hash,我正在尝试用python实现一个哈希函数。你会考虑下面的一个真正的哈希函数吗?我有10个桶,值从1到7。它还将计算碰撞的数量:) 测试: 编辑: 我查看了所有注释,并尝试创建另一个哈希函数。这次我使用random来确定要散列的键。这次我只有3个水桶。我将尝试使用25个介于1和10之间的值: import random count=[] list1 = [] # bucket 1 list2 = [] # bucket 2 list3 = [] # bucket 3 the_lis

我正在尝试用python实现一个哈希函数。你会考虑下面的一个真正的哈希函数吗?我有10个桶,值从1到7。它还将计算碰撞的数量:)

测试:

编辑:

我查看了所有注释,并尝试创建另一个哈希函数。这次我使用random来确定要散列的键。这次我只有3个水桶。我将尝试使用25个介于1和10之间的值:

import random


count=[]

list1 = []  # bucket 1
list2 = []  # bucket 2
list3 = []   # bucket 3

the_list = []
the_list.append(list1)
the_list.append(list2)
the_list.append(list3) # using lists within a list


def func():
   while True:
       number=random.randint(1,10)
       i=random.randint(0,len(the_list)-1)
       the_list[i].append(number)
       count.append(number)
       if len(count)>25: # testing for 25 values
           break

func()
print "Bucket 1:", the_list[0]
print "Bucket 2:", the_list[1]
print "Bucket 3:", the_list[2]
测试:


哈希函数需要为相同的输入提供相同的输出。。。你的只是给出一个随机数。所以,我不认为它是一个真正的哈希函数,不。

不。哈希函数必须是确定性的。它不能依赖随机性

哈希过程必须是确定性的,这意味着对于给定的输入值,它必须始终生成相同的哈希值。换句话说,它必须是散列数据的函数,从数学意义上来说。此要求不包括依赖于外部变量参数的哈希函数,例如伪随机数生成器或时间。它还排除了依赖于被散列对象的内存地址的函数,因为该地址在执行过程中可能会发生变化(在使用某些垃圾收集方法的系统上可能会发生这种情况),尽管有时可以对该项进行重新散列)


来源:(维基百科)

不。你根本没有做任何散列,只是将值随机粘贴到数组中。散列函数接受输入并返回确定性值。返回值就是散列。

不,这不是散列函数。散列函数将一个元素从较大的数据集映射到较小的数据集。这只是在列表中随机插入数字。

不,这不是散列函数。给定输入的散列函数应反复给出相同的输出

为什么不在python中使用
hash
,而不是构建自己的哈希函数呢。Python内置了哈希实现

>>> hash("xyz")
-5999452984703080694

因此,不要使用
列表
而是使用
dict
散列
,其中键是该散列输出。合谋很容易被发现。

在检索元素时,您如何确定元素的去向?你在那里介绍Randonmes,下一次你有“1”的时候,它可能会用“bucket 10”来代替,但是糟糕的是。。。它真的在bucket 3中。@John:你的测试输出不可能来自你发布的代码。count是func()的本地值,在运行func之前打印冲突计数。在这里很容易看到可能发生的情况,但通常要确保发布独立的示例,这些示例在自己运行时生成输出。是的,我忘记为最后一次打印创建空间,print语句在我的程序的func中。不过,您通常不需要在Python中实现哈希函数,因为您通常不需要自己执行哈希函数的任何操作。特别是,您不需要创建散列容器,因为有两个内置容器,分别称为
dict
(关联映射)和
set
(具有唯一性约束的集合)。谢谢。我被误导了,你对如何在python中创建一个简单的散列函数有什么建议吗?这里有一个简单的散列函数来散列一个整数:f(x):返回x%10@John:修改后的示例用整数随机填充某些数组。没有可以散列的输入。你需要哈希函数做什么?
import random


count=[]

list1 = []  # bucket 1
list2 = []  # bucket 2
list3 = []   # bucket 3

the_list = []
the_list.append(list1)
the_list.append(list2)
the_list.append(list3) # using lists within a list


def func():
   while True:
       number=random.randint(1,10)
       i=random.randint(0,len(the_list)-1)
       the_list[i].append(number)
       count.append(number)
       if len(count)>25: # testing for 25 values
           break

func()
print "Bucket 1:", the_list[0]
print "Bucket 2:", the_list[1]
print "Bucket 3:", the_list[2]
Bucket 1: [5, 9, 8, 10, 3, 10]
Bucket 2: [10, 5, 8, 5, 6, 2, 6, 1, 8]
Bucket 3: [9, 4, 7, 2, 1, 6, 7, 10, 9, 1, 5]
>>> hash("xyz")
-5999452984703080694