`

Facebook interview - Suffix Array Order

 
阅读更多

首先定义了suffix string 或者说suffix arrary
如果有个数组是 int[] text = {10, 20, 30, 25}
那么 suffix[0] = {10, 20, 30, 25}
           suffix[1] = {20, 30, 25}
           suffix[2] = {30, 25}
           suffix[3] = {25}
如果对这些数组进行lexical order 的排序,我们可以得到
suffix[0] < suffix[1] < suffix[3] < suffix[2]
问题是:
    input: int[] text
    output: int[] suffix_array_order
e.g.
input: int[] text = {10, 20, 30, 25}
output: int[] suffix_array_order = {0, 1, 3, 2}

 

Solution:

注意: Arrays.sort(T[], Comparator)只能用于排序对象数组,不能用于排序int, long之类的原始值数组!

public Integer[] suffixArrayOrder(int[] A) {
	int n = A.length;
	Integer[] order = new Integer[n];
	for(int i=0; i<n; i++) {
		order[i] = i;
	}
	
	Arrays.sort(order, new Comparator<Integer>(){
		@Override
		public int compare(Integer o1, Integer o2) {
			int res = A[o1] - A[o2];
			while(res == 0 && o1 < n && o2 < n) {
				res = A[o1++] - A[o2++];
			}
			return res;
		}
	});
	
	System.out.println(Arrays.toString(order));
	return order;
}

 

第二题: input:  int[] text, int[] subText
              output: boolean isExist;
检查text数组中有没有一个subarray 是subText。要求时间小于O(N^2), N == text.length;
这里假设我们有了第一题的 suffix_array_order.
(做法是binary search)

 

这个没看懂,不知道怎么写。

原文见:

http://www.1point3acres.com/bbs/thread-125284-1-1.html

分享到:
评论

相关推荐

    matlab开发-SuffixArray

    后缀数组(Suffix Array)是字符串处理中一种重要的数据结构,尤其在生物信息学和文本检索领域有着广泛应用。本文将详细讲解如何在MATLAB环境中实现后缀数组的计算。 后缀数组是一个数组,包含了给定字符串的所有...

    matlab开发-SuffixArray.zip.zip

    在IT领域,Suffix Array是一种非常重要的数据结构,尤其在文本处理和生物信息学中有着广泛的应用。本项目“matlab开发-SuffixArray.zip”显然关注的是如何在MATLAB环境中实现Suffix Array。MATLAB是一种强大的编程...

    SuffixArray 扩展(以单词为单位) 源码

    SuffixArray是一种高效的数据结构,主要用于字符串的搜索和处理。它以一种有序的方式存储了一个字符串的所有后缀,使得在大量文本中进行模式匹配、查找、排序等操作变得非常快速。在这个扩展版本中,我们以单词为...

    Algorithm-Ukkonen-s-Suffix-Tree-Algorithm.zip

    Algorithm-Ukkonen-s-Suffix-Tree-Algorithm.zip,ukkonen的后缀树算法,一个用python实现的完整版本,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Compressed-Suffix-Array:基于CSA的自索引结构

    #Compressed-Suffix-Array(CSA) ##它是什么? CSA是一种简洁的数据结构(SDS),SDS可以隐式地表示一个对象,并且在接近对象信息论下界的空间中有效地支持对原始对象的操作。 CSA是SA(suffix-array)的隐式表达,...

    A Compressed Enhanced Suffix Array Index:具有简洁LCP信息的基于压缩后缀数组的索引-开源

    项目的源代码托管在GitHub上,地址为:https://github.com/saaddan/Compressed-Enhanced-Suffix-Array。用户可以查看源代码,了解其实现细节,也可以下载并运行代码,进行测试和使用。 代码文件`codeBsB2012`可能是...

    Codeforces D1/D2. Prefix-Suffix Palindrome (Manacher) /详解

    Prefix-Suffix Palindrome (Easy version) D2. Prefix-Suffix Palindrome (Hard version) 题意: 对于给出的字符串,可截取其前缀和后缀,求能组成的最长回文串。 思路: 正常来说暴力的思路是先匹配前缀pre和后缀...

    Infix--to-suffix-.rar_infix-Postfix

    在计算机科学领域,中缀表达式(Infix notation)是一种常用的数学表达式表示方式,其中运算符位于操作数之间,例如 `2 + 3 * 4`。然而,这种表达式在计算机处理时存在一定的复杂性,因为它需要依赖括号来确定运算的...

    public-suffix:发布更新版本`public-suffix.json`

    公共后缀一个存储库,为PyFunceble项目分发更新版本的public-suffix.json 。执照MIT LicenseCopyright (c) 2019, 2020, 2021 PyFuncebleCopyright (c) 2017, 2018, 2019, 2020, 2021 Nissar ChababyPermission is ...

    Two Efficient Algorithms for Linear Suffix Array Construction

    ### 两种高效的线性后缀数组构建算法 #### 摘要与背景 本文提出两种高效的线性后缀数组构建算法。这两种算法通过分治法和递归技术实现了线性的性能。它们与其他线性时间复杂度的后缀数组构建算法的不同之处在于...

    后缀数组(Suffix Array)

    ### 后缀数组(Suffix Array) #### 一、概述 后缀数组是一种数据结构,用于存储字符串所有可能的后缀的排序列表。这种数组在文本处理、字符串匹配、生物信息学等领域有着广泛的应用。通过构建后缀数组,可以有效...

    Suffix-Array-and-LCP

    后缀阵列和 LCP 后缀数组和最长公共前缀注意:我们保证每条线的长度相等。 给定 k = 2, 3, ..., 10 的字符串 find,出现 k 次的最长字符串是什么? 注意:如果输入是aaaaa,出现两次的最长字符串是aaaa 例如,如果这...

    Codeforces D1/D2. Prefix-Suffix Palindrome (字符串hash) /详解

    Prefix-Suffix Palindrome (Easy version) D2. Prefix-Suffix Palindrome (Hard version) 题意: 对于给出的字符串,可截取其前缀和后缀,求能组成的最长回文串。 思路: 正常来说暴力的思路是先匹配前缀pre和后缀...

    字符串匹配_kmp_extend-kmp_trie_suffix-array

    字符串匹配是计算机科学中一种重要的算法问题,广泛应用于文本处理、搜索引擎、编译器等领域。在给定的标题和描述中,提到了几种不同的字符串匹配方法:KMP算法、AC自动机与Trie树以及后缀数组。...

    Simple Linear Work Suffix Array Construction

    ### 简单线性工作后缀数组构造 #### 概述 本文介绍了一种针对整数字母表的简单线性时间后缀数组构造算法——斜算法(Skew Algorithm)。后缀数组是一种重要的数据结构,它按字典序对字符串的所有后缀进行排序。...

    harmonyos2-Turkish-Suffix-Library:土耳其语后缀库

    turkish-suffix-library 使用 名词 from turkish_suffix_library.turkish import Turkish print(Turkish('araba').dative()) print(Turkish('sebep').ablative()) print(Turkish('sebep').accusative()) print...

    Fast Parallel Suffix Array on the GPU-计算机科学

    eScholarship provides open access, scholarly publishing services to the University of California and delivers a dynamic research platform to scholars worldwide.Previously Published Works ...

    AStyle_2.05.1

    其中,Run中输入astyle的命令参数:"D:\program files\AStyle\bin\AStyle.exe" --style=ansi-s4 -S -N -L -m0 -M40 --convert-tabs --suffix=.pre %f 同理,新建java格式化命令,Astyle参数为  C:\AStyle\bin\...

Global site tag (gtag.js) - Google Analytics