Category: 程序设计
“回溯 = DFS + 剪枝” 是一个对回溯算法简明且直观的描述。要理解这一点,我们可以先拆解这个等式中的几个关键概念。 深度优先搜索 (DFS) DFS(Depth-First Search)是一种图或树的遍历算法,它从根节点开始,沿着一个分支深入到尽可能远的节点,直到达到叶子节点或无可拓展的节点,然后回溯到上一个节点继续搜索其他分支。这种搜索策略自然地适合解决需要遍历所有可能状态的问题,如组合、排列问题等。 剪枝/Pruning 剪枝(Pruning)是指在搜索过程中,提前排除不符合条件的分支,以减少计算量。剪枝的主要作用是在搜索的过程中,避免无谓的计算。通过某些条件判断,可以在尚未完全展开某些分支时就停止搜索,从而减少时间复杂度。例如,当我们知道一个分支肯定不会产生有效解时,可以提前终止该分支的搜索过程。 回溯算法/Backtracking 回溯算法可以看作是深度优先搜索DFS的一种特例或具体应用。它采用DFS的思想,在搜索的过程中尝试每一种可能的选择(通常是通过递归实现),并在发现某个选择不符合条件或已经无法产生有效解时,及时回退(即“回溯”),然后继续尝试其他选择。这种“试探—回溯”的过程就构成了回溯算法。 结合三者的理解 DFS 为回溯算法提供了基本的搜索框架,即从起点开始沿着一个分支深入探索; 剪枝 则是在DFS基础上增加的优化步骤,目的是减少无效状态的探索。 因此,“回溯 = DFS + 剪枝” 是对回溯算法的一种总结。它表明回溯算法不仅仅是简单的深度优先搜索,还通过剪枝来提升效率。剪枝使得回溯算法在解决很多问题时比单纯的DFS更加高效,尤其是在解空间很大的情况下,剪枝能够大幅减少计算量,从而使得问题求解变得可行。 例子:Alpha-beta 算法剪枝 Alpha-beta 剪枝可以看作是一种回溯算法,它通过剪枝技术增强了深度优先搜索算法。 …
apache 服务器将访问请求记录在 /var/log/apache2 中,因此我们可以分析这个日志文件来找出最后的几个请求。 下面解析 apache2 服务器日志,并逐行打印请求。它基于 BASH 命令:tail 和 awk。 #!/bin/bash NUMBER_OF_REQUESTS=50 LOG_FILES_PREFIX=/var/log/apache2/access tail -n $NUMBER_OF_REQUESTS $LOG_FILES_PREFIX* | awk -F'"' ' # 确保 IP 地址、请求和用户代理字段存在 $1 ~ /^+\.+\.+\.+/ …
Chrome插件版本v2在今年6月份之后就会被淘汰了,早在四年前(2020年12月份版本88),v3就已经被支持,Google给了超过3年的时候让开发者把v2版本迁移到v3。我一直很懒,手头上几个插件都还是v2,挑选了几个用户比较多的改了一下迁移到v3。 手头上有11个Chrome插件,只有一些已经迁移到了v3。 将 Chrome 扩展程序的 v2 Manifest 转换为 V3 所需的更改 大部分需要的改动都在 manifest.json。 manifest.json 是Chrome插件的配置文件: manifest_version 需要改成3 browser_action 需要重命名为:”action” web_accessible_resources 版本2: "web_accessible_resources": , 版本3: "web_accessible_resources": , "extension_ids": }], background/scripts 版本2: …
2024年1月1号,计算机科学家/Pascal 编程语言之父 尼克劳斯·沃斯 Niklaus Wirth 离世(89岁),一代巨星陨落,让很多人感到难过。 FreePascal.org 网站上发布了: The creator of the Pascal Language, Niklaus Wirth, has passed away on January 1st. Free Pascal would not have existed without …
我们可以通过两种方式来查询任意一个区块链上BTC比特币钱包的余额。 一种方式是直接查询节点,节点可以自己架,但可能较复杂,自己架服务器节点也不便宜。但是这种方法是可以获得较低的延时 (Latency),因为从节点取的数据本来就是链上的。当然可以撸别人的节点,如果节点可靠又需要获取更实时的数据那这是一种比较好的选择。 另一种方式就是使用第三方的API服务,这样的服务一般有免费还有付费的API调用。使用这些API节点的好处是更容易更简单,但会有一定的数据延时,因为API节点需要实时的去链上取数据,再更新到数据库中,再返还给调用者,有一点的时延。 本文介绍获取比特币帐号余额的两种调用第三方服务的方式:mempool 和 blockcypher。 通过 Mempool API 来查询指定比特币钱包地址的余额 我们可以使用 Mempool.space 的 API(有免费和付费版本的 API 调用)通过以下 NodeJs 函数检查任何 BTC/比特币钱包地址的余额: const axios = require('axios'); async function getBTCAddressBalance(btcAddress) { const …
VBScript是我最喜欢的编程语言之一,因为其简单的语法,性能稳定,而且在Windows上和COM组件结合,可以做很多事情,Windows管理员在Powershell出来之前用VBScript来完成各种管理工作。VBScript也是我早期学会的编程语言之一(还有LOGO海龟作图,FoxBase数据库,Pascal等)。现在我的任务栏还有VBS Editor,因为我很有时候需要验证些数学或者其它事情,我就会用VBScript来写。比较复杂的我就会用Python。 据说比尔盖茨对Basic语言情有独钟,因为他老人家当年就是设计并开发了Basic语言,后来一直在Windows产品中支持Basic,比如Visual Basic,VB for Application,ASP等。 2023年10月份也就是这个月,微软发布声明,说弃用VBScript了。因为现在,Powershell更为强大,可以完全取代VBScript。VBScript的语法简单很多,而且已经十几二十年没有更新了,已经跟不上主流语言的各种语法糖和框架,和COM结合也带来了一些安全问题,比如当年VBScript来写一些恶意脚本还是非常容易的。 可以在微软的这个页面看到: In future releases of Windows, VBScript will be available as a feature on demand before its removal from the operating system. …
ChatGPT是今年最火的技术,人工智能AI,但是确实来说,是AGI,也就是通用人工智能 Artificial General Intelligence。ChatGPT可以用来做很多事情,我最近发现它可以拿来转换编程语言。比如我想学习一门新语言了,就可以把现有的程序让ChatGPT转换成新的编程语言。或者在力扣上换个新的编程语言学习一下。 下面这个例子ChatGPT转换后的代码我就可以直接在力扣上跑,就通过了所有的测试用例。 网上还有很多不同语言之间的转换工具,相信实现起来都不简单,但是如今有了ChatGPT这个通用人工智能,完全可以套个UI前端就可以实现不同语言之间的转换工具,而且转换逻辑完全不用自己实现,调用ChatGPT的API即可。 英文:Programming Language Conversion Tool based on ChatGPT AI 本文一共 283 个汉字, 你数一下对不对. 可以用ChatGPT来轻松转换编程语言. (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈