给定一个表示嵌套组及其成员的有向图字典,展平结构并返回给定组的所有用户。你知道吗
MEMBERS_BY_GROUPS = {
'Group0': {
'NestedGroups': ['Group3'],
'Members': ['User0', 'User1']
},
'Group1': {
'NestedGroups': ['Group3'],
'Members': ['User2', 'User3', 'User4']
},
'Group2': {
'NestedGroups': ['Group3', 'Group5'],
'Members': ['User4', 'User5']
},
'Group3': {
'NestedGroups': ['Group4'],
'Members': ['User6', 'User7']
},
'Group4': {
'NestedGroups': [],
'Members': ['User8', 'User9']
},
'Group5': {
'NestedGroups': [],
'Members': ['User10', 'User11']
}
}
def flattenGroup(members_by_groups, group_name): // (MEMBERS_BY_GROUPS, 'Group2') -> ['User4', 'User5', 'User6', 'User7', 'User8', 'User9',, 'User10', 'User11']
这是我的作业,我不知道怎么回答。我该怎么办?你知道吗
首先设计一个算法来解决这个问题,然后用编程语言Objective-C来实现这个算法。你知道吗
因此,先看看问题:
既然你已经被赋予了这个任务,我假设你知道什么是字典和有向图。示例数据似乎还使用数组——方括号中的项目列表(
[
,]
)。你知道吗问题涉及表示有向图的数据,样本数据恰好表示有向无环图(DAG)。如果你的数据中有循环,你就需要在你的算法中处理它们,如果你不这样做,你的算法可能会永远绕着循环走。。。现在让我们假设你真的只有一个DAG-没有周期。你知道吗
问题还包括:
以及示例数据和示例查询:
那么我们从这个问题中得到了什么信息:
def flattenGroup(members_by_groups, group_name):
”-生成一个算法flattenGroup
,该算法给定数据,组名返回该组及其嵌套组中的所有成员。你知道吗flattenGroup(MEMBERS_BY_GROUPS, 'Group2') -> ['User4', 'User5', 'User6', 'User7', 'User8', 'User9',, 'User10', 'User11']
”-看起来查询应该返回一个列表(数组)([
&;]
),不包含重复项(例如User4
只发生一次-检查样本数据,在跟随DAG时发现两次),并进行排序(这可能只是巧合)假设我们可以读出一个算法(在伪代码中):
注意:我写过使用集合,因为这样描述算法是有意义的,而且集合不包含重复项。是否使用集合或列表实现它是一个实现细节。
算法对你有意义吗?在它完成之前不要继续。
现在让我们详细说明一下算法。第一个子表达式是:
这很简单,每个节点都包含一个成员列表,无需进一步详细说明。第二个子表达式和后续子表达式的形式如下:
这当然更复杂,因为嵌套组的成员依次包含其嵌套组,所以这可以通过详细说明来完成,但是要做什么呢?这个子表达式的任务和我们正在写的算法完全一样,除了一个不同的组,所以这行就是:
整个算法现在是:
你知道如果有循环,这个算法为什么会失败吗?除非继续,否则不要继续!
好吧,现在你有一个算法,时间写一些代码。。。你知道吗
那是你的工作!我们已经使用了字典、数组和集合,它们是由Cocoa的
NSDictionary
、NSArray
、NSSet
以及它们的NSMutableX
版本在Objective-C中提供的。你知道吗阅读文档并编写算法。如果你陷入困境,问一个新问题,包括你的算法,你写的代码,和你的问题。也许有人会帮你。你知道吗
HTH公司
相关问题 更多 >
编程相关推荐