- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经看到各种讨论和代码尝试来解决 "String reduction"来自 interviewstreet.com 的问题,但没有一个是通过动态规划来解决的。
在 Dynamic Programming 下列出部分,问题描述如下:
Given a string consisting of a,b and c's, we can perform the following operation: Take any two adjacent distinct characters and replace it with the third character. For example, if 'a' and 'c' are adjacent, they can replaced with 'b'.
What is the smallest string which can result by applying this operation repeatedly?
这个问题可以使用穷举式暴力搜索来解决,有效地创建一个包含所有可能替换的树:
// this is more or less pseudo code from my head
int GetMinLength(string s)
{
// solve edge cases
if (s.Length == 1) return 1;
if (s.Length == 2) return ReduceIfPossible(s);
// recursive brute force
int min = s.Length;
for (int i = 0; i<s.Length-1; i++)
{
if (s[i] != s[i+1])
{
var next = GetMinLength(
s.Substring(0, i) +
Reduce(s[i], s[i + 1]) +
s.Substring(i + 2)
);
if (next < min) min = next;
}
}
}
这对于更大的 N
显然是失败的( N <= 100
),所以我试图将它分解成更小的子问题,记住它们,然后合并结果。
问题是我无法确定 "optimal substructure" 的状态,需要应用动态规划(或换句话说“合并”子问题的结果)。最小化字符串的一部分并不能保证最终的字符串确实是最小的解决方案。
在这种情况下,可以合并到最终解决方案的子问题“状态”是什么?
最佳答案
之所以棘手,是因为您需要将其视为连续的 2 个动态规划问题。
i
个字符可以减少到的最小长度。 (您在步骤 1 中构建的表可用于递归地将此问题简化为已解决的子问题。)第二个提供您的答案。如果您已经解决了第一个问题,那就简单多了。
关于algorithm - 解决 "string reduction"挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11244710/
我对流动的两种情况下变量 acc 的数据共享范围感到困惑。在情况 1 中,我收到以下编译错误:error: reduction variable ‘acc’ is private in outer c
我正在研究这个 Verilog 文件: `default_nettype none module stroboscope(i_clk, o_led); input wire i_clk
我正在为即将到来的 Haskell 考试复习,但我不明白过去论文中的一个问题。谷歌出现 nothing useful fst(x, y) = x square i = i * i i) Source
LEt x_t = F(x_{t-1}) 是 chaotic regime. 中的一个时间离散动力系统 从初始条件x_0开始,我们可以生成一个时间序列=x_t,其中t =1,2,...,T 表示时间索
我正在尝试使用 OpenMP 并行化 vector 点积程序。下面的代码显示了我所做的。 #define N 1000000 float dotProduct = 0; float vector1Ho
我有一个需要以下内容的项目。 代码中将声明四个数组,如下所示: var ROW1 = ['module1']; var ROW2 = ['module2', 'module3']; var ROW3
我是 opencl 的新手。我试过“获取数组中每个元素的所有立方体的总和”。这是我的内核代码: kernel void cubeSum(global float *input,
在 C99 规范中它说 remquo: The remquo functions are intended for implementing argument reductions which can
我正在关注'Learn Haskell Fast and Hard'我能够理解其中的大部分内容,但我对以下代码示例有两个问题。 在第一个函数中,为什么我不需要 l 但在第二个版本中我确实需要 l? 在
我需要更新数据框中的一些数据,就像 SQL 中的更新查询一样。我当前的代码如下: import pandas df = pandas.read_csv('filee.csv') # load trad
我有函数的当前版本: void* function(const Input_st *Data, Output_st *Image) { int i,j,r,Of
目前正在尝试使用 CUDA pdf 中的 Reduction #3 outline here . 这是我的 Reduction 函数的样子 template __device__ void offs
我正在尝试使用官方 CUDA 缩减 PDF 中讨论的缩减内核之一 here .但是,我不明白它是如何工作的,除非我遗漏了一些似乎没有多大意义的东西。 这是我的内核: __global__ void e
Please click this to see my problem 嗨。 关于这个问题,我只是看不懂它提供的解决方案。 我们知道 Atm 的补码 = { : M是TM,M不接受W}和照片中描述的
我已经看到各种讨论和代码尝试来解决 "String reduction"来自 interviewstreet.com 的问题,但没有一个是通过动态规划来解决的。 在 Dynamic Programmi
我正在尝试对 zip 迭代器进行最小缩减,但使用自定义运算符仅考虑元组中的第二个字段(第一个字段是键,而第二个字段是值)实际上与减少有关) 但是,我无法让它工作,目前正在计算 vector 中存在的结
这个问题在这里已经有了答案: OpenMP in C array reduction / parallelize the code (1 个回答) 关闭去年。 我正在尝试使用 #pragma omp
我有一种用 PLT-Redex 定义的语言,它具有(动态)mixin 类型。表达式如下所示: ; terms / expressions (e ::= x (lkp e f) (c
我正在研究代码 war 中的方向减少问题,但我无法弄清楚它给我带来的错误。我知道也有类似的情况,但是当我在 Visual Studio Code 上测试我的代码时,它工作得完美无缺,所以我不确定为什么
我用 C++ 和 CUDA 编写的 TensorFlow r1.5 操作的一部分涉及对张量的缩减。我已经实现了简单的交错缩减算法,如所述here .但是,似乎并没有减少整个缓冲区。 block 减少的
我是一名优秀的程序员,十分优秀!