Hello 算法 1.1.0 Python版然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上,我们不能简单地确定哪种实现更加节省内存,需要针对具体情况进行分析。 5.1.4 栈的典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就会对上一个网页执 行入栈,这样我们就可以通过后退操作回到上一个网页。后退操作实际上是在执行出栈。如果要同时支 持后退和前进,那么需要两个栈来配合实现。 ‧ 同时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。请 注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 队列的逻辑,因此可以实现栈与队列 的所有应用,并且更加灵活。 Q:撤销(undo)和反撤销(redo)具体是如何实现的? 使用两个栈,栈 A 用于撤销,栈 B 用于反撤销。 1. 每当用户执行一个操作,将这个操作压入栈 A ,并清空栈 B 。 2. 当用户执行“撤销”时,从栈 A 中弹出最近的操作,并将其压入栈 B 。 3. 当用户执行“反撤销”时,从栈 B 中弹出最近的操作,并将其压入栈 A 。0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0 Python版然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上,我们不能简单地确定哪种实现更加节省内存,需要针对具体情况进行分析。 5.1.4 栈的典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就会对上一个网页执 行入栈,这样我们就可以通过后退操作回到上一个网页。后退操作实际上是在执行出栈。如果要同时支 持后退和前进,那么需要两个栈来配合实现。 ‧ 同时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。请 注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 队列的逻辑,因此可以实现栈与队列 的所有应用,并且更加灵活。 Q:撤销(undo)和反撤销(redo)具体是如何实现的? 使用两个栈,栈 A 用于撤销,栈 B 用于反撤销。 1. 每当用户执行一个操作,将这个操作压入栈 A ,并清空栈 B 。 2. 当用户执行“撤销”时,从栈 A 中弹出最近的操作,并将其压入栈 B 。 3. 当用户执行“反撤销”时,从栈 B 中弹出最近的操作,并将其压入栈 A 。0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上,我们不能简单地确定哪种实现更加节省内存,需要针对具体情况进行分析。 5.1.4 栈的典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就会对上一个网页执 行入栈,这样我们就可以通过后退操作回到上一个网页。后退操作实际上是在执行出栈。如果要同时支 持后退和前进,那么需要两个栈来配合实现。 ‧ 同时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。请 注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 队列的逻辑,因此可以实现栈与队列 的所有应用,并且更加灵活。 Q:撤销(undo)和反撤销(redo)具体是如何实现的? 使用两个栈,栈 A 用于撤销,栈 B 用于反撤销。 1. 每当用户执行一个操作,将这个操作压入栈 A ,并清空栈 B 。 2. 当用户执行“撤销”时,从栈 A 中弹出最近的操作,并将其压入栈 B 。 3. 当用户执行“反撤销”时,从栈 B 中弹出最近的操作,并将其压入栈 A 。0 码力 | 364 页 | 18.43 MB | 10 月前3
Hello 算法 1.0.0b4 Python版然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上,我们不能简单地确定哪种实现更加节省内存,需要针对具体情况进行分析。 5.1.4. 栈典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就会将上一个网页执 行入栈,这样我们就可以通过「后退」操作回到上一页面。后退操作实际上是在执行出栈。如果要同时 支持后退和前进,那么需要两个栈来配合实现。 ‧ 时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(即队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。 请注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 在前序遍历中搜索节点 13.1.1. 尝试与回退 之所以称之为回溯算法,是因为该算法在搜索解空间时会采用“尝试”与“回退”的策略。当算法在搜索过 程中遇到某个状态无法继续前进或无法得到满足条件的解时,它会撤销上一步的选择,退回到之前的状态, 并尝试其他可能的选择。 对于例题一,访问每个节点都代表一次“尝试”,而越过叶结点或返回父节点的 return 则表示“回退”。 值得说明的是,回退并不仅仅包括0 码力 | 329 页 | 27.34 MB | 1 年前3
Hello 算法 1.0.0b5 Python版然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上,我们不能简单地确定哪种实现更加节省内存,需要针对具体情况进行分析。 5.1.4 栈典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就会将上一个网页执 行入栈,这样我们就可以通过后退操作回到上一页面。后退操作实际上是在执行出栈。如果要同时支持 后退和前进,那么需要两个栈来配合实现。 ‧ 程 hello‑algo.com 102 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(即队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。 请注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 com 265 13.1.1 尝试与回退 之所以称之为回溯算法,是因为该算法在搜索解空间时会采用“尝试”与“回退”的策略。当算法在搜索过 程中遇到某个状态无法继续前进或无法得到满足条件的解时,它会撤销上一步的选择,退回到之前的状态, 并尝试其他可能的选择。 对于例题一,访问每个节点都代表一次“尝试”,而越过叶结点或返回父节点的 return 则表示“回退”。 值得说明的是,回退并不仅仅包括0 码力 | 361 页 | 30.64 MB | 1 年前3
Hello 算法 1.0.0b2 Python版当然,由于结点需要额外存储指针,因此 链表结点比数组元素占用更大。 综上,我们不能简单地确定哪种实现更加省内存,需要 case‑by‑case 地分析。 5.1.4. 栈典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就将上一个网页执行 入栈,这样我们就可以通过「后退」操作来回到上一页面,后退操作实际上是在执行出栈。如果要同时 支持后退和前进,那么则需要两个栈来配合实现。 ‧ ,并且提供更高的自由度。 我们知道,软件的“撤销”功能需要使用栈来实现;系统把每一次更改操作 push 到栈中,然后通过 pop 实现 撤销。然而,考虑到系统资源有限,软件一般会限制撤销的步数(例如仅允许保存 50 步),那么当栈的长度 > 50 时,软件就需要在栈底(即队首)执行删除,但栈无法实现,此时就需要使用双向队列来替代栈。注 意,“撤销”的核心逻辑仍然是栈的先入后出,只是双向队列可以更加灵活地实现。0 码力 | 186 页 | 15.69 MB | 1 年前3
Python 标准库参考指南 3.13 3.13.0 可以提供 description 来描述该格式,它将被get_unpack_formats() 返回。 shutil.unregister_unpack_format(name) 撤销注册一个解包格式。name 为格式的名称。 shutil.get_unpack_formats() 返回所有已注册的解包格式列表。所返回序列中的每个元素为一个元组 (name, extensions 封存流中来回复制数据。 如果 provider (待传输对象类型的实现) 和 consumer (通信系统的实现) 都支持 pickle 第 5 版或更高版本所 提供的外部传输功能,则此约束可以被撤销。 482 Chapter 12. 数据持久化 The Python Library Reference, 发行版本 3.13.0 提供方 API 需要 pickle 的大型数据对象必须实现专门用于协议 logging.getLoggerClass() 返回标准的Logger 类,或是最近传给setLoggerClass() 的类。此函数可以从一个新的类定义中 调用,以确保安装自定义的Logger 类不会撤销其他代码已经应用的自定义操作。例如: class MyLogger(logging.getLoggerClass()): # ... 在这里重写行为 logging.getLogRecordFactory()0 码力 | 2246 页 | 11.74 MB | 9 月前3
Python 标准库参考指南 3.13 3.13.0 可以提供 description 来描述该格式,它将被get_unpack_formats() 返回。 shutil.unregister_unpack_format(name) 撤销注册一个解包格式。name 为格式的名称。 shutil.get_unpack_formats() 返回所有已注册的解包格式列表。所返回序列中的每个元素为一个元组 (name, extensions 封存流中来回复制数据。 如果 provider (待传输对象类型的实现) 和 consumer (通信系统的实现) 都支持 pickle 第 5 版或更高版本所 提供的外部传输功能,则此约束可以被撤销。 478 Chapter 12. 数据持久化 The Python Library Reference, 发行版本 3.13.0 提供方 API 需要 pickle 的大型数据对象必须实现专门用于协议 logging.getLoggerClass() 返回标准的Logger 类,或是最近传给setLoggerClass() 的类。此函数可以从一个新的类定义中 调用,以确保安装自定义的Logger 类不会撤销其他代码已经应用的自定义操作。例如: class MyLogger(logging.getLoggerClass()): # ... 在这里重写行为 logging.getLogRecordFactory()0 码力 | 2242 页 | 11.73 MB | 9 月前3
Python 标准库参考指南 3.12 extra_args 指明。 可以提供 description 来描述该格式,它将被get_unpack_formats() 返回。 shutil.unregister_unpack_format(name) 撤销注册一个解包格式。name 为格式的名称。 shutil.get_unpack_formats() 返回所有已注册的解包格式列表。所返回序列中的每个元素为一个元组 (name, extensions 封存流中来回复制数据。 如果 provider (待传输对象类型的实现) 和 consumer (通信系统的实现) 都支持 pickle 第 5 版或更高版本所 提供的外部传输功能,则此约束可以被撤销。 提供方 API 需要 pickle 的大型数据对象必须实现专门用于协议 5 以上版本的__reduce_ex__() 方法,该方法将为任 何大型数据返回一个PickleBuffer 实例(而不是bytes logging.getLoggerClass() 返回标准的Logger 类,或是最近传给setLoggerClass() 的类。此函数可以从一个新的类定义中 调用,以确保安装自定义的Logger 类不会撤销其他代码已经应用的自定义操作。例如: class MyLogger(logging.getLoggerClass()): # ... 在这里重写行为 logging.getLogRecordFactory()0 码力 | 2253 页 | 11.81 MB | 9 月前3
Python 标准库参考指南 3.12 extra_args 指明。 可以提供 description 来描述该格式,它将被get_unpack_formats() 返回。 shutil.unregister_unpack_format(name) 撤销注册一个解包格式。name 为格式的名称。 shutil.get_unpack_formats() 返回所有已注册的解包格式列表。所返回序列中的每个元素为一个元组 (name, extensions 封存流中来回复制数据。 如果 provider (待传输对象类型的实现) 和 consumer (通信系统的实现) 都支持 pickle 第 5 版或更高版本所 提供的外部传输功能,则此约束可以被撤销。 提供方 API 需要 pickle 的大型数据对象必须实现专门用于协议 5 以上版本的__reduce_ex__() 方法,该方法将为任 何大型数据返回一个PickleBuffer 实例(而不是bytes logging.getLoggerClass() 返回标准的Logger 类,或是最近传给setLoggerClass() 的类。此函数可以从一个新的类定义中 调用,以确保安装自定义的Logger 类不会撤销其他代码已经应用的自定义操作。例如: class MyLogger(logging.getLoggerClass()): # ... 在这里重写行为 logging.getLogRecordFactory()0 码力 | 2253 页 | 11.81 MB | 9 月前3
共 27 条
- 1
- 2
- 3













