Python 我的逻辑有什么问题吗?在可分性中不可分的问题?
我试图解决关于可数不可分性的问题,下面是我的解决方案。我的总分只有55%。我的逻辑是计算数组中元素的所有除数,然后从数组的总长度中减去它们,得到每个元素的非除数数 此问题来自Codibility的课程部分,可在第11课下的链接中查看:Python 我的逻辑有什么问题吗?在可分性中不可分的问题?,python,arrays,python-3.x,dictionary,Python,Arrays,Python 3.x,Dictionary,我试图解决关于可数不可分性的问题,下面是我的解决方案。我的总分只有55%。我的逻辑是计算数组中元素的所有除数,然后从数组的总长度中减去它们,得到每个元素的非除数数 此问题来自Codibility的课程部分,可在第11课下的链接中查看: 首先,让我们编写一个简单的函数来正确地解决问题,即使可能效率低下: def basic_sol(B): return [ len([d for d in B if b % d != 0]) for b in B ] 然后,让我们运行一个测试,看看是否可以找
首先,让我们编写一个简单的函数来正确地解决问题,即使可能效率低下:
def basic_sol(B):
return [ len([d for d in B if b % d != 0]) for b in B ]
然后,让我们运行一个测试,看看是否可以找到一些错误案例:
TRIALS=100
LENGTH=2
MAX_NUM=100
for trial in range(TRIALS):
B = [ random.randint(1, MAX_NUM) for j in range(LENGTH) ]
my_sol = solution(B)
correct_sol = basic_sol(B)
if(my_sol != correct_sol):
print(B)
print(my_sol)
print(correct_sol)
break
这会很快产生一些结果:
Problem [63, 21]
My solution [1, 1]
Correct solution [0, 1]
因为63可以被它自己和21整除,所以列表中不整除它的项数应该是零,但程序返回1
现在,您的工作是获取这个测试用例,在您的程序中运行它,并找出它被错误处理的原因
另外,问问自己,你的解决方案比给出的一行解决方案的效率高多少。似乎两者都是O(n^2)。也许这里有一种更有效的方法来处理问题?首先,让我们编写一个简单的函数来正确地解决问题,如果可能效率低下:
def basic_sol(B):
return [ len([d for d in B if b % d != 0]) for b in B ]
然后,让我们运行一个测试,看看是否可以找到一些错误案例:
TRIALS=100
LENGTH=2
MAX_NUM=100
for trial in range(TRIALS):
B = [ random.randint(1, MAX_NUM) for j in range(LENGTH) ]
my_sol = solution(B)
correct_sol = basic_sol(B)
if(my_sol != correct_sol):
print(B)
print(my_sol)
print(correct_sol)
break
这会很快产生一些结果:
Problem [63, 21]
My solution [1, 1]
Correct solution [0, 1]
因为63可以被它自己和21整除,所以列表中不整除它的项数应该是零,但程序返回1
现在,您的工作是获取这个测试用例,在您的程序中运行它,并找出它被错误处理的原因
另外,问问自己,你的解决方案比给出的一行解决方案的效率高多少。似乎两者都是O(n^2)。也许这里有一种更有效的方法来处理问题?代码与您期望的有什么不同?请给出一个例子。好吧,它没有通过1个正确性测试和3个可编译性性能测试,但由于测试用例是隐藏的,我无法在我的逻辑中找到缺陷。不幸的是,出于同样的原因,没有可复制的示例。代码与您期望的有什么不同?请给出一个例子。好吧,它没有通过1个正确性测试和3个可编译性性能测试,但由于测试用例是隐藏的,我无法在我的逻辑中找到缺陷。不幸的是,出于同样的原因,没有可复制的示例。谢谢!让我用这种方法试试,我检查可编码性的第一件事是虚拟解(O(n^2)),它也得到55%。我认为重点是以某种方式使用Erathostene的筛子来获得更有效的算法。谢谢!让我用这种方法试试,我检查可编码性的第一件事是虚拟解(O(n^2)),它也得到55%。我认为重点是以某种方式使用Erathostene的筛子来获得更有效的算法。