gpt4 book ai didi

algorithm - 仅比较已更新列表的高效算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:40 24 4
gpt4 key购买 nike

即使描述这个问题也很困难,但我会试一试。我已经挣扎了几天,决定问这里。
好吧,所以我试着模拟“概念”,或者我称之为“事物”。只是一般的概念这与处理逻辑有关。
所以,每个“事物”都是由它与其他事物的关系来定义的。我将其存储为每个关系5位的集合。“事情”可能是这样的:

class Thing {
char* Name;
HashTable<Thing*, int> Relationships;
}

所以,我把“东西”塑造成那样。每个关系5位。每一位代表一种可能的关系。就像这样:1等于,2内,3外,4包含,5重叠。把所有的5位都打开意味着我们完全不知道这段关系是什么。两位意味着我们认为这种关系可能是两种可能性之一关系从“未知”开始(所有5位都是真的),随着时间的推移变得更加具体。
所以这就是我如何模拟随时间增长的知识事物从一个完全未知的状态开始,可以通过部分已知的状态,并且可以到达完全已知的状态。
再多一点背景:
我试图通过使用额外的类来为“概念”(事物)的建模添加额外的定义这样地:
class ArrayDefinition {
Array<Thing> Items;
}

我的东西课变成这样:
class Thing {
char* Name;
HashTable<Thing*, int> Relationships;
ArrayDefinition* ArrayDef;
}

这个“arraydef”不用了。如果需要的话,它只是用来用的。有些“东西”没有数组,有些有数组。但所有的“事物”都有关系。
我可以处理这个“arraydefinition”来找出两件事之间的关系!例如,如果 X = [ A B C D E ]Y = [ C D E ],我的代码可以处理这两个数组,并找出“ Y inside X”。
好吧,那就够背景了我已经解释了核心问题,避免了我真正的代码有各种分散注意力的细节。
问题是:
问题是让这个过程不会慢得离谱。
想象一下,有2000个“东西”假设其中1000个有数组定义。现在,这就使得500000个可能的“数组对”成为可能,我们需要相互比较。
我希望我现在终于明白了。如何避免他们互相攻击我已经意识到,如果两个“事物”有一个完全已知的关系,那么比较它们的“数组定义”是没有意义的,因为这只是用来计算关系的额外细节,但是我们有确切的关系,所以没有意义。
所以…假设这些“有数组的事物”中只有500个具有未知或部分已知的关系这仍然使250000(ish)可能的“数组对”进行比较!
现在。。。对我来说,最明显的出发点是认识到,除非用于定义两个数组的关系发生变化(变得更加具体),否则处理这个“数组对”就没有意义。
例如,假设我有两个数组:
    X = [ A B C D E ]
Y = [ Q W R T ]

现在,如果我这么说,那就太好了。但这并不影响x和y之间的关系,因为t与r的关系被称为“相等”,而在它可能完全未知之前,这并不意味着我需要再次比较x和y。
另一方面,如果我说“ T=R”,这是用来定义两个数组的东西之间的关系所以说“ T outside E”意味着我需要处理x的数组和y的数组。
我真的不想比较500000个“数组对”来处理1000个数组的逻辑,因为它们之间几乎没有任何变化!
所以…我第一次尝试简化这个,就是保留一个东西用来定义的所有数组的列表。
假设我有3个数组:
    A = [ X Y Z ]
B = [ X X X X ]
C = [ X Z X F ]

好吧,X用在3个数组中所以,x可以保留一个列表,列出它在其中使用的所有数组。
所以,如果我说 T outside E,这会显示一个y用来定义的所有数组的列表,而x用来定义的所有数组的列表。假设x用于3个数组,y用于1个数组。由此,我们可以得出需要比较的两个“数组对”(A vs B和A vs C)。
我们可以通过检查数组对中是否已经有完全已知的关系来进一步修剪这个列表。
我现在的问题是,它看起来还是太过分了。
假设x是一个非常普通的“东西”。它被用在10000个数组中。Y是一个很常见的东西,用在10000个数组中。
我最终还是得到了100000000个数组对来进行比较。好吧,假设我不需要把它们全部比较,实际上,只有50个是部分已知或完全未知的。
但是…我仍然需要查看100000000个数组对的列表,以确定哪些是部分已知的。所以效率还是很低的。
我真的很想知道是否没有有效的方法来做这件事。如果我真的能做的就是制定一些有效的“启发式”策略。我还没有太多的运气想出好的策略。
我意识到这个问题是高度专业化的。我意识到读这篇长文章可能会花太长时间。我只是不知道如何缩短文章长度,或者用更常见的问题来描述。
如果有帮助…我最好的表达方式是“如何只比较已更新的列表”。
有人有什么想法吗?那太好了如果不是也许只有我写下这些可以帮助我的思考过程。
问题是,我只是忍不住觉得有一些算法或方法可以让这个问题快速高效地运行。我只是不知道那个算法是什么。
谢谢大家

最佳答案

一般来说,你不可能为每一个操作都设计出一个尽可能快的结构我们需要权衡。
这个问题看起来与在关系数据库上执行查询非常相似-SELECT * WHERE ...。你可以考虑去那里寻找灵感。

关于algorithm - 仅比较已更新列表的高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2196949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com