首页 > 其他分享 >模拟计算hash前面N个0需要的时间

模拟计算hash前面N个0需要的时间

时间:2024-11-19 10:07:09浏览次数:1  
标签:hash 前面 counter 模拟计算 prefix time print runtime

写了一个python代码用来模拟计算当hash前面有N个0时需要多长时间。

代码如下:

import hashlib
import time
from datetime import timedelta
from plyer import notification


def find_hash_with_prefix_zeros(prefix_length=6):
    # 初始字符串
    base_text = "Hello, World!"
    # 计数器
    counter = 0

    while True:
        # 构建新的字符串
        text = f"{base_text}{counter}"
        # 计算哈希值
        hash_value = hashlib.sha256(text.encode()).hexdigest()
        # print(f"hash_value:{hash_value}")

        # 检查哈希值前缀是否包含指定数量的0
        if hash_value.startswith('0' * prefix_length):
            notification.notify(
                title="通知",
                message="hash计算完成",
                app_name="hash计算",
                timeout=10  # 通知显示的时间,单位为秒
            )
            print(f"Found after {counter} attempts:")
            print(f"Text: {text}")
            print(f"Hash: {hash_value}  prefix_length={prefix_length}")
            break

        # 增加计数器
        counter += 1
        # print(f"counter:{counter}")


# 计算某个函数需要运行多长时间
def measure_runtime(func, *args, **kwargs):
    # 记录开始时间
    start_time = time.time()
    # 调用函数
    func(*args, **kwargs)
    # 记录结束时间
    end_time = time.time()
    # 计算运行时间(秒)
    runtime_seconds = end_time - start_time
    # 将运行时间转换为 timedelta 对象
    runtime = timedelta(seconds=runtime_seconds)
    # 打印运行时间,格式为小时:分钟:秒
    print(f"函数运行时间: {runtime}")


def main():
    # 调用函数,寻找前缀包含N个0的哈希值
    measure_runtime(find_hash_with_prefix_zeros, prefix_length=6)


if __name__ == '__main__':
    main()

计算过程打印日志如下:

 

hash前面N个0的时间记录:

 

hash前面几个0

计算的时长

1

1毫秒

2

1毫秒

3

1毫秒

4

0.24秒

5

1.35秒

6

10.97秒

7

3分31秒

8

1小时28分

9

4天

     

9个0就需要4天时间了:

 

我们可以大概预估下:

 

10

40天

11

400天

     

后面的就不跑了,btc目前前导19个0,可想而知像btc的挖矿难度了。

随着0的数量的增加,计算的时长就越长:

 

我电脑的配置:AMD Ryzen 7 8845HS w/ Radeon 780M Graphics 3.80 GHz

这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。

想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。

感谢你的阅读与支持,期待在未来的文章中与你再次相遇!

我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。

标签:hash,前面,counter,模拟计算,prefix,time,print,runtime
From: https://www.cnblogs.com/shuinanxun/p/18554334

相关文章

  • 集合类源码浅析のJDK1.8ConcurrentHashMap(上篇)
    文章目录前言一、概述二、CHM的属性1、属性三、新增方法1、put2、initTable四、分段计数1、addCount2、fullAddCount3、sumCount总结前言  本篇是JDK1.8的ConcurrentHashMap源码个人学习笔记,ConcurrentHashMap(笔记中简称CHM)是一种线程安全的HashMap,1.8中废弃了......
  • 集合类源码浅析のJDK1.8ConcurrentHashMap(下篇)
    文章目录前言一、分段扩容1、addCount2、transfer3、helpTransfer二、查询二、删除总结前言  主要记录ConcurrentHashMap(笔记中简称CHM)的查询,删除,以及扩容方法的关键源码分析。一、分段扩容1、addCount  扩容的逻辑主要在addCount方法的后半段:private......
  • Hash
    Hash一种快速判定的方法,具体是将一个复杂的结构映射成一个整数,用极低的错误概率换取极快的比较效率。进制Hash对于序列的Hash,关心元素之间的位置关系。不要把任意字符对应到数字0,比如假如把a对应到数字0,那么将不能只从Hash结果上区分ab和b.注意有时候卡自然溢出和int范围......
  • 散列表-HashMap的增删改查-Java
    在Java中,HashMap 是一种基于散列表的Map接口实现,可以使用null值和null键。以下是对 HashMap<Character,Integer> 进行的增删改查操作:1.增(put) map.put(key,value)、查(get) Integervalue=map.get(key)importjava.util.HashMap;publicclasstest{public......
  • 基于MinHash的相似性算法
    原文链接:基于MinHash的相似性算法–每天进步一点点MinHash也称最小哈希式独立排列局部性敏感哈希,是一种非常快速的对两个不同集合进行相似性分析的方法。该算法起初主要用于在搜索引擎中的重复网页检查,现在也应用于解决大规模聚类问题。1.与Jaccard相似性关系在采用基于Jacca......
  • 谈谈ConcurrentHashMap的扩容机制
    ​​ConcurrentHashMap​​​是Java中一种线程安全且高效的哈希表实现,它在Java8之后的版本中采用了与早期版本不同的扩容机制。在Java8及以后的版本中,​​ConcurrentHashMap​​利用了分段锁(Segment,直到Java8)和之后的CAS(CompareandSwap)操作以及节点的树化来实现高效的并发读......
  • 学习笔记(三十六):[email protected] (非线性容器HashMap)
    概述:HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value一、导入import{HashMap}from'@kit.ArkTS' 二、定义lethashMap:HashMap<string,number>=ne......
  • hashCode()与equals()之间的关系
      在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。  1.hashCode()和equals()是Object类中定义的两个重要方法,用于对象的比较和哈希处理。2.hashCode()方法:hashCo......
  • hashCode()与equals()之间的关系
      在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。  1.hashCode()和equals()是Object类中定义的两个重要方法,用于对象的比较和哈希处理。2.hashCode()方法:hashCo......
  • GeoHash处理经纬度,降维,空间填充曲线
    个人博客:无奈何杨(wnhyang)个人语雀:wnhyang共享语雀:在线知识共享Github:wnhyang-Overview参考https://segmentfault.com/a/1190000042971576GeoHash原理以及代码实现_geohash编码-CSDN博客GeoHash代码实现--java_geohashjava代码示例-CSDN博客在线经纬度距离计算http://......