本文共 1421 字,大约阅读时间需要 4 分钟。
原文:
译者:
协议:
自豪地采用
我们将结束数据结构和算法的部分,并将数据结构用于实际问题。我已经写了几个 Web 服务器,一个不断出现的问题是,将 URL 路径匹配到“动作”。你会在每个 Web 框架,Web 服务器,和必须基于层次化的键来“路由”信息的任何东西中发现此问题。当你的 Web 服务器收到URL /do/this/stuff/
时,必须确定每个部分是否可能附加了某种操作或配置。如果你在/do/
配置了 Web 应用程序,那么你的网络服务器应该使用/this/stuff/
做什么呢?是否认为它是失败的,或将其传递给 Web 应用程序?如果/do/this/
中有一个目录怎么办?而且,如何快速检测到错误的 URL,因此你不必处理不存在的巨大请求?
这种层次化的搜索经常出现,这是对你将算法和数据结构应用于问题的能力,以及性能分析能力进行测试的最佳测试。
首先,请确定你了解 URL 是什么以及如何使用。如果没有,那么我建议你花时间去写一个带有一些复杂路由的小型 Flask 应用程序。这是你将要实现的路由。
接下来,你应该执行以下操作:
URLRouter
类,你将为所有实现派生它。你应该可以对此URLRouter
执行以下操作: /DO/THIS/STUFF/
只返回正好是它的东西。/DO/THIS/STUFF/
将匹配/DO/
,如果这是唯一的匹配。/DO/THIS/STUFF/
会返回/DO/
而不是/DO/THIS/
。/DO/THIS/STUFF/
将返回/DO/THIS/
而不是/DO/
。TSTree
创建URLRouter
的子类,因为这样最容易了。确保测试了下面这些事情: TSTREE
和你搜索的内容里面。DoubleLinkedList
,BSTree
,Dictionary
和 Python 的dict
来实现。确保你的泛用测试适用于所有这些。目标是看看与其他数据结构相比,TSTree
有多快。它可能会击败大多数东西,但也许 Python dict
多数情况会赢,因为它针对 Python 进行了优化。你甚至可以为每个操作猜测,哪个数据结构具有最佳性能。
SuffixArray
,因为它类似于TSTree
,但为了使用它,你必须添加相同的操作。实现它,然后看看SuffixArray
如何比较。如果你想深入了解算法和数据结构,我强烈推荐 Steven S. Skiena 的一书。他的书使用 C,所以你可能需要先阅读《笨办法学 C》,以便能够浏览它。除此之外,它是一本很好的书,因为它涵盖了分析算法和数据结构的性能的理论和实现。
转载地址:http://rslul.baihongyu.com/