笨办法学 Python · 续 练习 24:URL 快速路由

练习 24:URL 快速路由

原文:Exercise 24: Fast URL Search

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

我们将结束数据结构和算法的部分,并将数据结构用于实际问题。我已经写了几个 Web 服务器,一个不断出现的问题是,将 URL 路径匹配到“动作”。你会在每个 Web 框架,Web 服务器,和必须基于层次化的键来“路由”信息的任何东西中发现此问题。当你的 Web 服务器收到URL /do/this/stuff/时,必须确定每个部分是否可能附加了某种操作或配置。如果你在/do/配置了 Web 应用程序,那么你的网络服务器应该使用/this/stuff/做什么呢?是否认为它是失败的,或将其传递给 Web 应用程序?如果/do/this/中有一个目录怎么办?而且,如何快速检测到错误的 URL,因此你不必处理不存在的巨大请求?

这种层次化的搜索经常出现,这是对你将算法和数据结构应用于问题的能力,以及性能分析能力进行测试的最佳测试。

挑战练习

首先,请确定你了解 URL 是什么以及如何使用。如果没有,那么我建议你花时间去写一个带有一些复杂路由的小型 Flask 应用程序。这是你将要实现的路由。

接下来,你应该执行以下操作:

  • 创建一个简单的基本的URLRouter类,你将为所有实现派生它。你应该可以对此URLRouter执行以下操作:
    • 添加一个带有关联对象的新 URL。
    • 获取 URL 的完全匹配。搜索/DO/THIS/STUFF/只返回正好是它的东西。
    • 获取 URL 的最佳匹配。搜索/DO/THIS/STUFF/将匹配/DO/,如果这是唯一的匹配。
    • 获取以此 URL 开头的所有对象。
    • 获取 URL 的最短匹配对象。搜索/DO/THIS/STUFF/会返回/DO/而不是/DO/THIS/
    • 获取 URL 的最长匹配对象。搜索/DO/THIS/STUFF/将返回/DO/THIS/而不是/DO/
  • 使用TSTree创建URLRouter的子类,因为这样最容易了。确保测试了下面这些事情:
    • 不同长度的随机 URL 和路径,在TSTREE和你搜索的内容里面。
    • 在不同情况下只寻找部分路径
    • 完全不存在的路径
  • 存在和不存在的非常长的路径
  • 一旦你让这个子类工作,并测试完毕,推广你的测试,所以你可以在所有打算完成的实现中运行它。
  • 然后,尝试使用DoubleLinkedListBSTreeDictionary和 Python 的dict来实现。确保你的泛用测试适用于所有这些。
  • 一旦完成了,开始分析这些实现的不同操作的性能。

目标是看看与其他数据结构相比,TSTree有多快。它可能会击败大多数东西,但也许 Python dict多数情况会赢,因为它针对 Python 进行了优化。你甚至可以为每个操作猜测,哪个数据结构具有最佳性能。

研究性学习

  • 我省略了SuffixArray,因为它类似于TSTree,但为了使用它,你必须添加相同的操作。实现它,然后看看SuffixArray如何比较。
  • 研究你最喜欢的 Web 服务器或 Web 框架是如何实现的。你会发现很多使用 URL 人不知道什么是三叉搜索树,尽管它对于常见操作非常有用。

深入学习

如果你想深入了解算法和数据结构,我强烈推荐 Steven S. Skiena 的《The Algorithm Design Manual》一书。他的书使用 C,所以你可能需要先阅读《笨办法学 C》,以便能够浏览它。除此之外,它是一本很好的书,因为它涵盖了分析算法和数据结构的性能的理论和实现。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、习资料等,我会提供帮助,提供资料,鼓励习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等科竞赛比赛、初期项目立项、习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源习/技术交流/习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值