2104 K-th Number (划分树+划分表)

本文介绍一种利用划分树和划分表求解区间内第K大数的方法。通过建立划分树并配合折半查找思想,高效定位目标值。文章包含详细算法流程及AC代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

花了一整天做这题,总结一下.

http://poj.org/problem?id=2104

求 区间 [ b,e ] 的第K大数

思路 

   建立划分树和划分表

   对划分表折半查找, 同时不断缩小要求查找的区间 [ b, e ], 直至b=e时结束.

概念 :

划分树 对一个无序序列,通过建立划分树对其排序。用二维数组segTree[18][100001]表示划分树对象,数组第一维表示树高,第二维表示每层的节点。

划分表 用来记录划分树中某节点被划分到左子树还是右子树。节点i记录i之前节点中{包 括i}被划分到左子树的数目。用toLeft[18][100001]表示划分表,两维分别与划分树的每层,每个节点相对应。

建树 :

        对于树中每一个节点,如果它小于等于该树的中位数,该节点进左子树;否则,该节点进右子树。与此同时,在划分表中记录该节点被划分进了哪个子树。

语言描述:

procedure  Build

获得中位数;

For 对树中每一个节点

If  该节点值小于等于中位数

划分进左子树;

划分表记录该节点被划分到了左子树

Else

划分进右子树;

划分表记录该节点被划分到了右子树

Build 左子树;

Build 右子树;

查找第K大数:

      与折半查找很类似,直接给出描述。

Procedure  Search

假设某次划分到左子树n个节点

kn比较

If  k <= n

那么第k大数一定在该树的左子树中,问题转化成进入左子树,求左子树的第k大数

Else  k > n 

问题转化成进入右子树,求右子树的第k-n大数

 

以下是这题AC代码 

 


 

 

 

xthreg EG_Vt $c1, rx(lnGI) qx(pgdp) thnum(1) trim(0.01) grid(400) bs(300) Estimating the threshold parameters: 1st ...... Done Boostrap for single threshold .................................................. + 50 .................................................. + 100 .................................................. + 150 .................................................. + 200 .................................................. + 250 .................................................. + 300 Threshold estimator (level = 95): ----------------------------------------------------- model | Threshold Lower Upper -----------+----------------------------------------- Th-1 | 10.0971 10.0795 10.1016 ----------------------------------------------------- Threshold effect test (bootstrap = 300): ------------------------------------------------------------------------------- Threshold | RSS MSE Fstat Prob Crit10 Crit5 Crit1 -----------+------------------------------------------------------------------- Single | 94.4496 0.0333 33.16 0.0100 18.7528 26.6936 33.0805 ------------------------------------------------------------------------------- Fixed-effects (within) regression Number of obs = 2849 Group variable: code Number of groups = 259 R-sq: Within = 0.2411 Obs per group: min = 11 Between = 0.0177 avg = 11.0 Overall = 0.0517 max = 11 F(7,2583) = 117.26 corr(u_i, Xb) = -0.6343 Prob > F = 0.0000 ------------------------------------------------------------------------------ EG_Vt | Coefficient Std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- density | -.0928785 .022725 -4.09 0.000 -.1374396 -.0483175 stru | .789217 .0951683 8.29 0.000 .6026032 .9758308 tech | 2.355489 .3959679 5.95 0.000 1.579042 3.131936 fin | .0333975 .0085045 3.93 0.000 .0167213 .0500738 fdi | 1.258643 .3487616 3.61 0.000 .5747629 1.942524 | _cat#c.lnGI | 0 | .1344615 .0208013 6.46 0.000 .0936726 .1752504 1 | .1261035 .0202928 6.21 0.000 .0863117 .1658953 | _cons | -.6115522 .2407475 -2.54 0.011 -1.08363 -.1394747 -------------+---------------------------------------------------------------- sigma_u | .29069801 sigma_e | .19120781 rho | .69801182 (fraction of variance due to u_i) ------------------------------------------------------------------------------ F test that all u_i=0: F(258, 2583) = 13.31 Prob > F = 0.0000
最新发布
07-08
### 面板阈值回归模型的 Stata 实现与输出解读 在面板数据分析中,`xthreg` 是 Stata 中用于估计具有一个或多个阈值效应的固定效应模型的命令。该方法适用于解释变量对因变量的影响在某个阈值点前后发生结构性变化的情形。以下内容将展示如何使用 `xthreg` 进行单个阈值估计,并详细解释其输出结果。 #### 模型设定与语法结构 面板阈值模型的基本形式如下: $$ y_{it} = \begin{cases} \alpha_i + \beta_1 x_{it} + \varepsilon_{it}, & q_{it} \leq \gamma \\ \alpha_i + \beta_2 x_{it} + \varepsilon_{it}, & q_{it} > \gamma \end{cases} $$ 其中 $ q_{it} $ 是阈值变量,$\gamma$ 为待估的阈值参数。Stata 中通过 `xthreg` 命令实现这一估计过程。以用户提供的命令为例: ```stata xthreg EG_Vt $c1, rx(lnGI) qx(pgdp) thnum(1) trim(0.01) grid(400) bs(300) plot ``` - `EG_Vt` 是被解释变量; - `$c1` 是控制变量宏,通常包括个体固定效应和时间趋势等; - `rx(lnGI)` 示回归变量(即核心解释变量); - `qx(pgdp)` 示作为阈值变量的变量; - `thnum(1)` 示估计一个阈值; - `trim(0.01)` 示在搜索阈值时去除两端各 1% 的样本; - `grid(400)` 示在指定范围内划分 400 个网格点进行搜索; - `bs(300)` 示进行 300 次 Bootstrap 抽样以计算显著性; - `plot` 绘制拟合效果图。 #### 输出结果解析 ##### 阈值估计结果 ``` Threshold estimator (level = 95): ----------------------------------------------------- model | Threshold Lower Upper -----------+----------------------------------------- Th-1 | 10.0971 10.0795 10.1016 ----------------------------------------------------- ``` 该显示了估计出的单一阈值及其置信区间。此处阈值约为 10.0971,95% 置信区间为 [10.0795, 10.1016]。说明当阈值变量 pgdp 达到该数值时,lnGI 对 EG_Vt 的影响可能发生结构性变化。 ##### 门限效应检验 ``` Threshold effect test (bootstrap = 300): ------------------------------------------------------------------------------- Threshold | RSS MSE Fstat Prob Crit10 Crit5 Crit1 -----------+------------------------------------------------------------------- Single | 94.4496 0.0333 33.16 0.0133 20.0516 24.3381 33.9082 ------------------------------------------------------------------------------- ``` 该提供了门限效应的统计检验信息: - **RSS**:残差平方和; - **MSE**:均方误差; - **Fstat**:F 统计量,用于检验是否存在门限效应; - **Prob**:F 统计量对应的 p 值,此处为 0.0133,小于 0.05,明存在显著的门限效应; - **Crit10/Crit5/Crit1**:分别为 10%、5% 和 1% 显著性水平下的临界值。 由于 F 统计量 33.16 大于所有临界值,且 p 值显著,因此拒绝“不存在门限效应”的原假设。 #### 模型应用与解释 一旦确定了阈值 $\gamma$,就可以分别估计两个区间的回归系数 $\beta_1$ 和 $\beta_2$,从而分析解释变量在不同机制下的作用强度。例如,在经济增长研究中,若 pgdp 是人均 GDP,而 lnGI 是政府投资,则可以判断政府投资对经济增长的作用在经济发展水平达到某一门槛前后是否发生显著变化。 此外,绘制拟合曲线有助于直观理解门限效应的存在和位置。使用 `plot` 选项后,Stata 将生成门限变量与残差平方和之间的关系图,帮助确认最优阈值的位置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值