小编Tem*_*pux的帖子

有人可以向我解释 Rabin-Karp 算法的复杂性吗?

我试图理解为什么 Rabin-Karp 算法的最坏情况运行时间是 O(nm) 而平均情况是 O(n+m)。

有人可以帮我吗?

algorithm big-o time-complexity string-matching rabin-karp

3
推荐指数
2
解决办法
4334
查看次数

在CLRS中实现DFS和BFS实现灰色的目的是什么?

在实现DFS和BFS时,CLRS作者为每个顶点区分3种颜色 - 灰色,黑色和白色.我知道黑色和白色表示节点是否被访问过.为什么我们需要灰色?

我的猜测是检测周期,但是我们还能检测出只有黑白的周期(即没有灰色)吗?

algorithm breadth-first-search depth-first-search clrs graph-algorithm

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

二维矩阵内大小为 HxW 的最大子数组

给定一个正整数的二维数组,找到大小为 HxW 且总和最大的子矩形。矩形的总和是该矩形中所有元素的总和。

输入: 具有正元素的 2D 数组 NxN 子矩形的 HxW 大小

输出: 具有最大元素和的 HxW 大小的子矩阵。

我已经使用暴力方法解决了这个问题,但是,我现在正在寻找具有更好复杂性的更好解决方案(我的暴力方法的复杂度是 O(n 6 ))。

algorithm max dynamic-programming submatrix

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

检查 DAG 的两个节点是否在恒定时间内位于同一条路径上

我有一个 DAG(有向无环图),它由边列表表示,例如

edges = [('a','b'),('a','c'),('b','d')]
Run Code Online (Sandbox Code Playgroud)

将给出图表

a - > b -> d
|
v
c
Run Code Online (Sandbox Code Playgroud)

我正在执行许多操作,我必须检查两个节点是否位于同一路径上(b并且d位于同一路径上,b而 和c不是来自上面的示例),这反过来又减慢了我的程序。我希望我能以某种方式遍历该图一次并保存所有路径,这样我就可以在恒定的时间内检查它。

这种加速可能吗?我将如何在 python 中实现它?

编辑:请注意,我需要检查两个方向,因此如果我有一对节点,(a,b)我需要检查atobbto a

python algorithm graph-traversal directed-acyclic-graphs graph-algorithm

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

Oracle SQL - 过去 12 个月的完整数据

我需要一个查询来动态提取最近 12 个月的运输数据(不包括当月)。因此,今天是 2016 年 9 月 30 日,我需要从 2015 年 9 月 1 日到 2016 年 8 月 31 日的数据。明天,查询将更改为 10-1-15 到 9-30-16 的日期范围。

这是我目前所拥有的:

WHERE (shipdate BETWEEN TRUNC(sysdate, 'Year') AND sysdate)
Run Code Online (Sandbox Code Playgroud)

此查询将数据从日历年的开始拉到今天的日期,而不是前 12 个完整的月份。我已经在 MySQL 和 MS SQL Server 中找到了答案,但在 Oracle 中找不到。这如何在 Oracle 中实现?

oracle date

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

将容器传递给priority_queue有什么用处

每次要为priority_queue使用自定义比较函数时,都必须将容器传递给它.在我看来,你应该总是传递vector<T>给它.现在起初我认为这是某种冗余,但事实并非如此.将容器传递给a priority_queue有什么用?我该如何使用它?

c++ containers stl priority-queue data-structures

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

从n个数字的总和中找到最接近的n

当我得到前n个数字的总和时,我试图求解n的最接近值。这意味着如果我的总和为60,则我的n应该为10,因为前10个数字的总和为55,如果我包括11,则总和为66,超出了我的要求总和。

int num=1, mysum = 0;  
int givensum=60;
while (mysum < givensum) {
    mysum += num;
    num++;
}
cout<<num-1;
return 0;
Run Code Online (Sandbox Code Playgroud)

我可以想到的另一种解决方法是求解二次方程
n(n+1) / 2 = givensum并从中得到n。还有其他解决方法吗?

algorithm logic

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

如何使用python从网站上抓取图表?

编辑:

因此,我已将下面的脚本代码保存到文本文件中,但使用 re 提取数据仍然没有返回任何内容。我的代码是:

file_object = open('source_test_script.txt', mode="r")
soup = BeautifulSoup(file_object, "html.parser")
pattern = re.compile(r"^var (chart[0-9]+) = new Highcharts.Chart\(({.*?})\);$", re.MULTILINE | re.DOTALL)
scripts = soup.find("script", text=pattern)
profile_text = pattern.search(scripts.text).group(1)
profile = json.loads(profile_text)

print profile["data"], profile["categories"]
Run Code Online (Sandbox Code Playgroud)

我想从网站中提取图表数据。以下是图表的源代码。

  <script type="text/javascript">
    jQuery(function() {

    var chart1 = new Highcharts.Chart({

          chart: {
             renderTo: 'chart1',
              defaultSeriesType: 'column',
            borderWidth: 2
          },
          title: {
             text: 'Productions'
          },
          legend: {
            enabled: false
          },
          xAxis: [{
             categories: [1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016],

          }],
          yAxis: {
             min: 0,
             title: {
             text: 'Productions'
          }
          },

          series: …
Run Code Online (Sandbox Code Playgroud)

python screen-scraping graph

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

添加存储在字符串变量中的数字

给定两个非负数num1和num2表示为字符串,返回num1和num2之和.

num1和num2的长度均小于5100.

num1和num2都只包含数字0-9.

num1和num2都不包含任何前导零.

您不得使用任何内置BigInteger库或直接将输入转换为整数.

我尝试了我的解决方案,但它不起作用.建议?

public class Solution {
    public String addStrings(String num1, String num2) {
        double multiplier = Math.pow(10, num1.length() - 1);
        int sum = 0;

        for (int i = 0; i < num1.length(); i++){
            sum += ((((int) num1.charAt(i)) - 48) * multiplier);
            multiplier /= 10;
        }

        multiplier = Math.pow(10, num2.length() - 1);

        for (int i = 0; i < num2.length(); i++){
            sum += ((((int) num2.charAt(i)) - 48) * multiplier);
            multiplier /= 10;
        }

        return "" + sum; …
Run Code Online (Sandbox Code Playgroud)

java algorithm

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