0

我需要根据学生的喜好将他们分类,我打算使用匈牙利算法对他们进行分类。我遇到的问题是人数多于班级,每个班级都有最少的人数。

在我的数据集中,大约有 550 名学生,每个学生都有一个排名前 5 的偏好列表。每个首选项都是一个对应于一个类的 ID。每个班级都有最小和最大容量(在我的情况下,最小上限为 15 人,最大上限为 27 人),数据集中有 21 个班级。

这是每个学生的示例数据集:

电子邮件 第一选择 第二选择 第三选择 第四选择 合适的选择
电子邮件@gmail.com 4 7 1 8 21
email2@gmail.com 6 9 14 17 2

这是每个类的示例数据集:

班级名称 班级号 最小帽 最大上限
班级标题1 1 15 27
类标题2 2 15 27
班级标题3 3 15 27

因为有大约 550 名学生和 21 个班级,并且为了让匈牙利算法起作用,我打算制作这些班级的“副本”。我会首先为每个班级(如班级 1.1、1.2、1.3、1.4、2.1、2.2、2.3 等)制作 15 份副本,以满足班级的最低要求,然后将更多副本添加到其中最受欢迎的班级直到有相同数量的学生和班级副本。

我的问题是:我将如何循环变量的复制,这些变量在算法中就像他们自己的类或类的选择一样(因为选择也需要不同,以便将人们放在同一类的不同副本中并且当有其他副本时不让他们只竞争一个变量)但是在排序完成后,副本可以追溯到原始吗?

提前谢谢你,如果有什么我可以澄清的,请告诉我

4

1 回答 1

-1

你应该知道typePython 中的一些 s 是mutable types,其中一个是list类型:

>>> a = []
>>> a.append('.')
>>> a
['.']
>>> b = a
>>> b.append('$')
>>> a
['.', '$']

您可以list在 Python 中将 a 描述为指向单元格的指针。


另一个例子可能是这样的:

>>> def foo(n: int):
        i+=1
>>> i = 2
>>> foo(i)
>>> i
2

如您所见,该i变量不是通过引用传递的,因为它是一个immutable typed变量。但是看看这个:

>>> def baz(n: list[int]):
        n[0]+=1
>>> i = [2]
>>> baz(i)
>>> i
[3]

s也是如此dict,因此,如果您想拥有该字典的副本 [独立于原始字典],则必须执行以下操作:

newDict = oldDict.copy()

所以,如果你需要一个简短的答案:

如何制作所有连接回原始变量的变量的“副本”?

你只需要创建它们b = a

于 2022-02-07T18:46:18.623 回答