小编Spa*_*dan的帖子

后缀数组算法

经过相当多的阅读后,我发现了后缀数组和LCP数组所代表的含义.

后缀数组:表示数组每个后缀的_lexicographic等级.

LCP数组:在按字典顺序排序后,包含两个连续后缀之间的最大长度前缀匹配.

几天以来,我一直在努力理解,后缀数组和LCP算法究竟是如何工作的.

这是代码,取自Codeforces:

/*
Suffix array O(n lg^2 n)
LCP table O(n)
*/
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

#define REP(i, n) for (int i = 0; i < (int)(n); ++i)

namespace SuffixArray
{
    const int MAXN = 1 << 21;
    char * S;
    int N, gap;
    int sa[MAXN], pos[MAXN], tmp[MAXN], lcp[MAXN];

    bool sufCmp(int i, int j)
    {
        if (pos[i] != pos[j])
            return pos[i] …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm suffix-array data-structures

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

在二维平面中找到K最近点到点P.

资料来源:AMAZON访谈问题

定点P和二维空间中的其他N个点,找到最接近 P 的N个点中的K个点.

这样做的最佳方式是什么?

这个Wiki页面在构建算法时没有提供太多帮助.任何想法/接近人.

language-agnostic algorithm math performance

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

如何找到与第k个最大和的对?

给定两个排序的数字数组,我们希望找到具有第k个最大可能总和的对.(一对是第一个数组中的一个元素,第二个数组中是一个元素).例如,使用数组

  • [2,3,5,8,13]
  • [4,8,12,16]

具有最大总和的对是

  • 13 + 16 = 29
  • 13 + 12 = 25
  • 8 + 16 = 24
  • 13 + 8 = 21
  • 8 + 12 = 20

因此,第四大总和是(13,8).如何找到具有第k个最大可能总和的对?

另外,最快的算法是什么?数组已经排序,大小为M和N.


我已经知道O(Klogk)解决方案,使用此处给出的Max-Heap .

它也是Google最喜欢的采访问题之一,他们需要一个O(k)解决方案.

我还在某处读到存在O(k)解决方案,我无法弄清楚.

有人可以用伪代码解释正确的解决方案.

PS请不要发布链接作为答案/评论.它不包含答案.

language-agnostic algorithm math performance combinatorics

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

分散数组中的重复项

来源:Google面试问题

编写例程以确保输入中的相同元素在输出中最大程度地分布?

基本上,我们需要以这样的方式放置相同的元素,使得TOTAL扩展尽可能最大.

例:

Input: {1,1,2,3,2,3}

Possible Output: {1,2,3,1,2,3}  

Total dispersion = Difference between position of 1's + 2's + 3's = 4-1 + 5-2 + 6-3 = 9 .
Run Code Online (Sandbox Code Playgroud)

不是在所有 肯定的是,如果有可用的this.Also最佳多项式时间算法,没有其他细节提供了除此之外的其他问题.

我的想法是,计算输入中每​​个元素的频率,然后将它们一次排列在输出中,每个不同的元素,直到所有频率都耗尽.

我不确定我的做法.

任何方法/想法的人.

algorithm performance

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

文件中的所有字谜

来源:微软访谈问题

我们得到一个包含单词的文件.我们需要确定其中存在的所有Anagrams.

有人可以建议最优化的算法来做到这一点.

我知道的唯一方法是 排序所有单词,然后检查.

algorithm anagram

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

查找前10个最常访问的URl,数据存储在网络中

来源:Google面试问题

给定一个庞大的计算机网络,每个计算机保留访问过的URL的日志文件,找到前十个访问最多的URL.

有很多大<string (url) -> int (visits)> maps.

计算 < string (url) -> int (sum of visits among all distributed maps)并获得组合地图中的前十名.

主要约束:地图太大,无法通过网络传输.也不能直接使用MapReduce.

我现在遇到了很多这类问题,其中processiong需要在大型分布式系统上完成.我无法思考或找到合适的答案.

我所能想到的只是蛮力,它以某种或其他方式违反了给定的约束.

algorithm performance distributed-system large-data

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

垂直打印树

要了解同一垂直线是什么,我们需要先定义水平距离.如果两个节点具有相同的水平距离(HD),则它们位于同一垂直线上.HD的想法很简单.根的HD为0,右边缘(连接到右子树的边缘)被认为是+1水平距离而左边缘被认为是-1水平距离.例如,在下面的树中,节点4的HD为-2,节点2的HD为-1,5和6的HD为0,节点7的HD为+2.

例子:

      1
    /   \

   2     3

  / \   / \
  4  5  6  7
Run Code Online (Sandbox Code Playgroud)

树有5条垂直线

Vertical-Line-1只有一个节点4

Vertical-Line-2:只有一个节点2

Vertical-Line-3:有三个节点:1,5,6

Vertical-Line-4:只有一个节点3

Vertical-Line-5:只有一个节点7

现在为树

        1            
      /    \
    2        3       
   / \      /  \
  4   5    6    7    
 / \           / \
8   9        10   11
Run Code Online (Sandbox Code Playgroud)

对于上面的树,我们应该从顶部到底部以及从左到右的角度获得每个垂直级别的输出

8

4

2 9

1 5 6或1 6 5(因为6和5处于相同的垂直水平,同样的HD,顺序无关紧要)

3 10

7

11

一种方法是简单地创建一个HD的多图,并进行一个水平顺序遍历,并将值推送到相应的HD索引.按顺序进行此操作将保证我们从上到下垂直访问.然后打印节点形成最低HD到最高HD,满足我们从左到右的约束.

我已经读过某个地方,我们可以用更好的方式使用Doubly-Link List方法或者类似的东西.任何帮助人们?

algorithm binary-tree data-structures

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

SQl:从文本文件更新表

这就是我要做的事情:

我有一个包含3列的文本文件:PID, X, Y.

现在我的数据库中有两个表:

  • Table 1 包含4列: UID, PID, X, Y
  • Table 2 包含多个列,必需的列 UID, X, Y

我需要Table 2使用相应的X和Y值进行更新.

我认为我们可以BULK INSERT用于更新table 1,然后是一些WHILE循环或其他东西.

但我无法弄明白确切的事情.

sql t-sql sql-server

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

在排序数组中查找未重复元素

来源:微软访谈问题

给定一个排序数组,其中每个元素出现两次,除了一次出现的单元,我们需要找到该元素.

现在标准的O(n)解决方案是执行列表的异或,它将返回未重复的元素(因为所有重复的元素都会被取消).

如果我们知道数组已经排序,是否有可能更快地解决这个问题?

arrays algorithm complexity-theory

7
推荐指数
2
解决办法
352
查看次数

为什么使用DFS在无向图中查找周期和拓扑排序以在有向图中查找周期?

对于无向图,如果我们需要找到一个循环,我们使用深度优先搜索,如这个较老的问题所述,这是一个众所周知的方法,也是最优的.

但对于有向图,另一个问题建议使用拓扑排序.

我的问题是,为什么我们不能使用我们用于无向图的相同技术来检查有向图中的周期?我已经想到了各种情况,算法似乎总是同意.

任何人都可以提出一些示例有向图,其中DFS无法找到一个循环,但拓扑排序呢?

algorithm graph depth-first-search topological-sort

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