小编dra*_*doc的帖子

"尽可能少地删除数字以使其保持递增顺序"的算法

我正在阅读"算法导论:创造性方法"并在第1章中遇到了这个问题:

问题1.3:您有一个数字列表,尽可能少地删除数字以使剩余数字按递增顺序排列.

例如,给定数组

9 44 32 12 7 42 34 92
Run Code Online (Sandbox Code Playgroud)

两个可能的选项是9 12 42 9232 42 92,前者删除的数字较少.

我尝试了一种递归算法,但对其性能不满意,因为它仍然需要测试太多的组合.我发现了一种可以快速获得良好结果的启发式算法,但我不确定它是否可以保证最佳结果.我在网上搜索但没有找到关于这个问题的任何讨论.我相信应该有一个更好的算法.

在这里写了两个方法,以防你想检查.

更新:我问这个问题的解决方案,@ josilber和@templatetypedef提供了链接和正确的方向来查看.事实证明,这是一个具有良好解决方案的已知问题家族的特例.这里没有必要编写详细的解决方案,最长的子序列的维基页面,耐心排序提供了详细信息.

值得注意的是,虽然答案有一些链接,但这个问题并不是要求资源或链接.真正的答案是"这个问题是一些已知解决问题的变体"的知识.

arrays algorithm mathematical-optimization

4
推荐指数
1
解决办法
390
查看次数

根据行号和条件选择 data.table R 行

在 data.table 中,我们可以根据行号或条件选择行:

> x <- data.table(letters[1:4], 1:4)
> x
   V1 V2
1:  a  1
2:  b  2
3:  c  3
4:  d  4
> x[2]
   V1 V2
1:  b  2
> x[V1 == "d"]
   V1 V2
1:  d  4
Run Code Online (Sandbox Code Playgroud)

但是我不能同时选择行号和条件:

> x[!2 & V2 > 1]
Empty data.table (0 rows) of 2 cols: V1,V2
Run Code Online (Sandbox Code Playgroud)

这可能是因为!2没有被解释为这种格式的行号。我知道我可以链接两个条件:

> x[!2][V2 > 1]
   V1 V2
1:  c  3
2:  d  4
Run Code Online (Sandbox Code Playgroud)

但是我想为这个子集分配新的列值

x[!2][V2 > 1, V3 := "more"]
Run Code Online (Sandbox Code Playgroud)

现在它只为中间链接的 data.table 创建列。我可以保存中间表然后合并回原始表,但这会很麻烦。 …

r data.table

3
推荐指数
1
解决办法
1万
查看次数

预先选择动态DT中闪亮的行

这个问题的更多动态版本

我在闪亮的应用程序中有一个DT,初始化时可能为空。我想预选DT中的所有行。我的第一次尝试是这样的:

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    fluidRow(
      radioButtons("select", "", c("none", "iris")),
      DT::dataTableOutput('x1')
    )
  ),
  server = function(input, output, session) {
    data <- reactive({
      if (input$select == "none") {
        return(NULL)
      } else if (input$select == "iris"){
        return(iris)
      }
    })
    output$x1 = DT::renderDataTable(
      data(), server = FALSE,
      selection = list(mode = 'multiple', selected = seq_len(nrow(data())))
    )
  }
)
Run Code Online (Sandbox Code Playgroud)

它选择正确,但Warning: Error in seq_len: argument must be coercible to non-negative integer开头有错误。我认为这是因为seq_len无法接受NULL输入。有趣的是,初始化之后,来回切换不会产生新的错误。

我尝试使用此版本对行向量使用反应值,对空输入使用空结果:

library(shiny)
library(DT) …
Run Code Online (Sandbox Code Playgroud)

r shiny dt

1
推荐指数
1
解决办法
1106
查看次数

如何在 R plotly 的森伯斯特图中获取单击切片的 event_data

在 Shiny 应用程序中使用 plotly R 包创建旭日形饼图时,用户可以单击该图以动态放大/缩小。我们希望能够为当前选定/居中的作品下载一些数据。

但是,我们无法从所有可能的 eventdata 选项中找到此信息。有悬停事件,但这还不够,因为用户可以单击一块,然后鼠标四处移动以悬停在其他块上,而无需单击它。

没有放大/缩小的点击事件。并且没有重新布局事件。我认为一定有一些 js 事件通过放大/缩小触发,但这不是用现有的 eventdata 函数捕获的。

更新:似乎有selectedPathjs 图表的属性,但是我不知道如何在 Shiny 中访问这些数据。

更新2:感谢您解决问题的答案。事实证明,它是 plotly R 包中的一个缺失功能​​,并且已在最近的 commit 中添加

shiny sunburst-diagram r-plotly

1
推荐指数
1
解决办法
1826
查看次数