组织二进制搜索 LibreOffice Calc?

问题描述 投票:0回答:1

有人知道在 LibreOffice Calc 中组织二进制搜索的方法吗?

举个简单的例子,假设我有列 A,其中列出了数字 1-16,按升序排序:(1,2,3,...); B列列出了小部件的名称;我想通过搜索 A 列中的数字来找到给定的小部件。足够简单:=SEARCH(number;A1:A16;B1:B16)。但假设我的列表包含 1600 个数字,已排序,并且我需要与条目 992 关联的小部件名称。“搜索”必须经过 992 次迭代才能达到所需的值。二进制搜索,la java,将把它减少到大约 10 次迭代。但这可以做到吗?

据我所知,电子表格中的每个单元格从根本上独立于所有其他单元格,甚至在一组单元格中组织二分搜索“树”,Calc 会希望遍历每个单元格并根据给定单元格包含的任何公式 - 即使该单元格与搜索线程无关。

SO:可以进行二分查找吗?

我在 LibreCalc 工作表中构建了一个二叉搜索树。形式上,这棵树是有效的:在视觉上,我得到这样的东西:

binary search tree

其中 (*) 表示显示“命中”存在的单元格内容。然而,这并不是真正的二分搜索,因为 LibreOffice Calc 会详细说明所有单元格 - 例如 A、A1、A2 - 即使它们不在搜索路径上,它通过 (B)-(B1)。

excel libreoffice-calc openoffice-calc
1个回答
-1
投票

JohnSUN,抱歉,但我不确定您的回答能解决问题。我知道如何单独和组合使用所有这些功能。问题是关于真正二分搜索的实现,即:在给定的排序值树中,搜索算法仅沿着路径搜索,而不是评估存储在矩阵中的所有值。

例如:set = {0,1,2,3,4,5,6,7,8}。方法或函数“binary(7)”将从“4”开始。如果搜索项(7)大于4,则移入数组的上半部分,否则移入下半部分,然后重复。通过这种方式,搜索分三步命中所需的值(例如评估为“4”、“6”和“8”)。

或者您是说 VLOOKUP 的“加速”功能 实际上遵循这种算法?如果是这样,道歉!

© www.soinside.com 2019 - 2024. All rights reserved.