问题标签 [fenwick-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4457 浏览

algorithm - 区间树、段树、芬威克树是否相同?

今天我听了一个关于 fenwick 树(二叉索引树)的讲座,老师说这棵树是区间树和段树的概括,但是我对这三种数据结构的实现是不同的。这个肯定是真的吗?为什么?

0 投票
1 回答
2737 浏览

data-structures - 使用 Fenwick 树增加范围

我想知道是否可以将 Fenwick 树(或二进制索引树)修改为:

1)将某个范围内所有元素的频率增加一定量

2)查询单个元素的频率。

这与传统的 Fenwick 树相反,传统的 Fenwick 树在单个元素上完成更新,查询在一个范围内完成(有点像逆 Fenwick 树)。

0 投票
1 回答
2252 浏览

algorithm - 3d 芬威克树

我有一个三维芬威克树数据结构。我需要计算从(x0, y0, z0)到的某个段的总和(x, y, z)

包含-排除的公式是什么?例如,对于 2D 变体,它是

提前致谢

http://www.comp.nus.edu.sg/~stevenha/ft.pdf

这是2D案例: 在此处输入图像描述

0 投票
1 回答
1614 浏览

algorithm - 二叉索引树(Fenwick Tree)——关于更新

我最近学习了Fenwick Tree(二进制索引树)数据结构。

查询时,我可以理解为什么要减去(idx & -idx)。但是,我真的不明白为什么在更新值时要添加 (idx & -idx)。

换句话说,我知道我们必须更新所有将受到更新某些单个元素 x 影响的间隔,并且我知道 BIT[x] 是第一个要更新的,但不明白为什么要更新下一个索引是 BIT[x + (x & -x)]

谢谢。

0 投票
1 回答
5038 浏览

algorithm - 如何用二叉索引树(BIT)找到一定长度的递增子序列的总数

如何使用二进制索引树(BIT)找到一定长度的递增子序列的总数?

实际上这是Spoj Online Judge的问题

示例
假设我有一个数组1,2,2,10

长度为 3 的递增子序列是1,2,41,3,4

所以,答案是2

0 投票
1 回答
1440 浏览

arrays - 使用 fenwick 树或 BIT 的数组中非递减子序列的最大总和

我们如何使用 fenwick 树找到数组中非递减子序列的最大和?例如我们有 1 4 4 2 2 3 3 1,这里非递减子序列的最大和是 11 (1 2 2 3 3)。

0 投票
1 回答
8599 浏览

c++ - 长度为 k 的递增子序列数

我试图理解在时间 O(n k log(n)) 中为我提供数组中长度为 K 的递增子序列数量的算法。我知道如何使用 O(k*n^2) 算法来解决同样的问题。我查了一下,发现这个解决方案使用 BIT (Fenwick Tree) 和 DP。我也找到了一些代码,但我一直无法理解。

以下是我访问过的一些有用的链接。

在 SO
Topcoder 论坛
随机网页中

如果有人能帮助我理解这个算法,我将不胜感激。

0 投票
1 回答
2520 浏览

c++ - SPOJ INVCNT - 怎么样?

谁能帮我完成这项任务http://www.spoj.com/problems/INVCNT/。首先,我尝试以 BIT 方式思考,但我做不到。谁能用 BIT 解释一下这个任务的解决方案。BIT-二进制索引树c ++

0 投票
2 回答
1453 浏览

c++ - O(klogn) 时间算法从 Fenwick-Tree 中找到第 k 个最小元素

我的意思是及时找到kthFenwick-Tree 中的最小实际频率O(k log(n))
如果我的数据是:

所以第二小的元素将在索引 1 处。

0 投票
2 回答
5466 浏览

algorithm - 如何在二叉索引树或 Fenwick 树中进行范围更新?

我正在尝试使用二进制索引树在 UVA中解决这个问题:

它是关于将一​​系列值递增或递减到 1 或 0,并且查询与 fenwick 树中的往常一样。
我知道如何在树中的特定位置更新。
更新范围时,我只是对该范围内的每个元素使用了一个循环来更新为 1 或 0。但这需要太多时间。

有没有其他方法可以在 fenwick 树中进行范围更新?

实际上它是一个 1' 和 0's 的数组,没有其他内容,更新过程仅包括将范围 [a,b] 更新为 1,0 或反转。这是我的代码: