我想最大限度地降低两个有一些单词的列表的比较成本。在下面的代码中,A
有4个字,而B
有2个字,费用为O(n^2)
太差了。而对于100个单词,它可能是耗时的。我可以以某种方式最小化它吗?
A= ["helry", "john" , "kat" , "david"]
d="Helry David"
B = d.lower().split()
for x in range(len(A)):
for i in range(len(B)):
if A[x] == B[i]:
print("Match = " + A[x])
else:
print("No")
答案 0 :(得分:1)
使用集而不是列表(顺便说一句,这些在Python中不称为数组)。你想要的是两组的交集,平均而言O(min(len(A), len(B))
(https://wiki.python.org/moin/TimeComplexity)。由于这个算法是内置的并且用C语言实现,因此它比你在Python代码中编写的任何东西都要快得多。
示例(A和B被认为是以前定义的):
>>> set(A) & set(B)
{'david', 'helry'}
这为您提供了A和B中包含的所有值的集合。
答案 1 :(得分:0)
答案 2 :(得分:0)
O(nlogn)
用于排序A
。 B
A
中O(log n)
的元素我会m
。对于B
元素
O(m*logn)
,它将是O(m)
。(或)如果您使用哈希,则可以m
为B
Hibernate: select max(profileNumber) from User_Profile
org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: ORA-00942: table or view does not exist
)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:85)
... 36 more
Updated Succesfully
Datadao.ProfileDAO@565eb0ea
元素执行。{/ p>
答案 3 :(得分:0)
您可以在 O(n)时间内使用in
设置和测试成员资格来执行此操作,您仍需要遍历所有名称In A
但是检查每个名称是否在名称集合中O(1)
:
A = ["helry", "john" , "kat" , "david"]
d = "Helry David"
st = set(d.lower().split())
for name in A:
if name in st:
print("Match = {}".format(name))
else:
print("No match")