gpt4 book ai didi

java - Python按位移位真的很慢吗?

转载 作者:行者123 更新时间:2023-12-02 09:02:51 27 4
gpt4 key购买 nike

我一定忽略了一些东西,但真的不明白为什么Python代码这么慢......

计算数组中元素在 [−1,000,000..1,000,000] 范围内的唯一元素,并使用位 vector 来执行此操作。使用 BitSet 的 Java 代码比 Python 快大约 50 倍,Python 需要 9 秒。

这可能是因为当我初始化bitvector = 0时,Python没有保留足够的内存,并且位 vector 需要随着它的增长而被复制?

Python:

def solution(array):
bitvector = 0
count = 0
for element in array:
# transform -1,000,000 to 0 etc
element_transformed = element + 1000000
if bitvector >> element_transformed & 1 == 0:
count += 1
bitvector = bitvector | 1 << element_transformed

return count

测试:

import unittest
import random

from .file1 import solution

class MySolutionTests(unittest.TestCase):
def test_solution_random_all_unique(self):
a = random.sample(range(-1000000, 1000001), 100000)
self.assertEqual(100000, solution(a))

在 Java 中:

package mypackage;

import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;


public class MyClass {

public static int solution(List<Integer> array) {
BitSet bitvector = new BitSet();
int count = 0;

for(int i = 0; i < array.size(); i++) {
int elementTransformed = array.get(i) + 1000000;
if(bitvector.get(elementTransformed) != true) {
count++;
bitvector.set(elementTransformed, true);
}
}
return count;
}

public static void main(String[] args) {
// TODO code application logic here
}
}

测试:

package mypackage;

import java.util.ArrayList;
import java.util.Collections;
import org.junit.Test;
import static org.junit.Assert.*;

public class MyClassTest {

public MyClassTest() {
}

@Test
public void testSolutionLong_RandomAllUnique() {
ArrayList array = new ArrayList();
for(int i = -1000000; i < 1000000; i++) {
array.add(i);
}
Collections.shuffle(array);
assertEquals(100000, MyClass.solution(array.subList(0, 100000)));

}
}

最佳答案

只是想直接回答您提出的问题。要回答为什么Python需要9秒而Java快50倍并不是一个简单的问题。在这里您可以深入了解先前的讨论Is Python slower than Java/C#?

我喜欢的看法是,Java 是一种面向对象的语言,而 python 是基于对象的语言。

在查看按位操作时,Java 使用原始数据类型,由于没有装箱-拆箱操作和包装器作为抽象层,因此可以说速度更快。因此,在每次迭代时查看代码时,python 都会将整数重新包装为整数类型的对象,而 Java 则不会。

但是,我不会想当然地认为 Java 总是比 Python 快。这取决于您使用哪个库以及您要解决哪个问题!

关于java - Python按位移位真的很慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52440611/

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