程序是否预先计算/缓存哈希键以提高性能

时间:2018-04-10 15:52:24

标签: caching hash

虽然哈希已经非常快了(看What integer hash function are good that accepts an integer hash key?),但想知道程序是否会缓存哈希键,所以你可以直接转到数组索引。

def decimal_minute_to_second(time_string):
    # partition time string into components
    hour_minute, seconds = time_string.split('.')

    # convert to seconds
    seconds = float(seconds) / 10 * 60

    # format seconds
    seconds = int(seconds) # might want to round here instead
    seconds = str(seconds)

    # reassemble
    output_string = hour_minute + ':' + seconds

    return output_string

def test(verbose=True):

    test = '04:26.9'
    expected = '04:26:54'
    actual = decimal_minute_to_second(test)

    if verbose:

        print('Test string: {}'.format(test))
        print('Expected string: {}'.format(expected))
        print('Actual string: {}'.format(actual))

    assert expected == actual

test()

# Test string: 04:26.9
# Expected string: 04:26:54
# Actual string: 04:26:54

如果没有,想知道为什么。

1 个答案:

答案 0 :(得分:1)

通常,如果对象包含将用于散列表查找的整数,则与在对象中存储预先计算的整数散列相关联的额外成本往往会超过在需要时简单计算它的成本。对于仅用于保持整数的对象,通常不值得预先计算哈希值。

另一方面,如果通用对象可用于保存整数或可能需要在哈希表中查找的其他内容,则存储所讨论对象的哈希可能是有益的。如果通用对象用于保存哈希计算成本低廉的东西,那么存储哈希的成本可能基本上被浪费,但如果该对象可能用于存储整数或非常长的字符串,那么存储哈希的好处可能会超过成本。