我正在阅读"算法导论:创造性方法"并在第1章中遇到了这个问题:
问题1.3:您有一个数字列表,尽可能少地删除数字以使剩余数字按递增顺序排列.
例如,给定数组
9 44 32 12 7 42 34 92
Run Code Online (Sandbox Code Playgroud)
两个可能的选项是9 12 42 92
和32 42 92
,前者删除的数字较少.
我尝试了一种递归算法,但对其性能不满意,因为它仍然需要测试太多的组合.我发现了一种可以快速获得良好结果的启发式算法,但我不确定它是否可以保证最佳结果.我在网上搜索但没有找到关于这个问题的任何讨论.我相信应该有一个更好的算法.
我在这里写了两个方法,以防你想检查.
更新:我问这个问题的解决方案,@ josilber和@templatetypedef提供了链接和正确的方向来查看.事实证明,这是一个具有良好解决方案的已知问题家族的特例.这里没有必要编写详细的解决方案,最长的子序列的维基页面,耐心排序提供了详细信息.
值得注意的是,虽然答案有一些链接,但这个问题并不是要求资源或链接.真正的答案是"这个问题是一些已知解决问题的变体"的知识.
在 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 创建列。我可以保存中间表然后合并回原始表,但这会很麻烦。 …
这个问题的更多动态版本此。
我在闪亮的应用程序中有一个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) 在 Shiny 应用程序中使用 plotly R 包创建旭日形饼图时,用户可以单击该图以动态放大/缩小。我们希望能够为当前选定/居中的作品下载一些数据。
但是,我们无法从所有可能的 eventdata 选项中找到此信息。有悬停事件,但这还不够,因为用户可以单击一块,然后鼠标四处移动以悬停在其他块上,而无需单击它。
没有放大/缩小的点击事件。并且没有重新布局事件。我认为一定有一些 js 事件通过放大/缩小触发,但这不是用现有的 eventdata 函数捕获的。
更新:似乎有selectedPath
js 图表的属性,但是我不知道如何在 Shiny 中访问这些数据。
更新2:感谢您解决问题的答案。事实证明,它是 plotly R 包中的一个缺失功能,并且已在最近的 commit 中添加。