├── netlify.toml
├── src
├── env.d.ts
├── components
│ ├── Hero.astro
│ ├── GraphPage.astro
│ ├── TableOfContents.astro
│ ├── PageFrame.astro
│ ├── Publications.astro
│ ├── LinkPreview.astro
│ ├── Timeline.astro
│ ├── publications.ts
│ ├── Graphviz.astro
│ ├── RecentChanges.astro
│ ├── svgpanzoom.ts
│ ├── Tags.astro
│ ├── TagList.astro
│ ├── Alphabetical.astro
│ ├── Backlinks.astro
│ ├── Graph.astro
│ ├── timeline.ts
│ ├── preview.ts
│ └── graphRenderer.ts
├── content
│ ├── docs
│ │ ├── tags.mdx
│ │ ├── graph.mdx
│ │ ├── recent.mdx
│ │ ├── alphabetical.mdx
│ │ ├── algorithms
│ │ │ ├── Automata
│ │ │ │ ├── Forward-DAWG-Matching.md
│ │ │ │ ├── Backward-DAWG-Matching.md
│ │ │ │ ├── Succint Backward DAWG Matching.md
│ │ │ │ ├── Reverse-Factor.md
│ │ │ │ ├── BSDMqx using multiple windows.md
│ │ │ │ ├── Turbo-Reverse-Factor.md
│ │ │ │ ├── Linear DAWG Matching.md
│ │ │ │ ├── Wide Window.md
│ │ │ │ ├── Deterministic-Finite-Automaton.md
│ │ │ │ ├── Improved Linear DAWG Matching.md
│ │ │ │ ├── Improved Linear DAWG Matching 2.md
│ │ │ │ ├── Simplified Forward Backward Oracle Matching.md
│ │ │ │ ├── Simplified Extended Backward Oracle Matching.md
│ │ │ │ ├── Simon.md
│ │ │ │ ├── BSDM using q-grams and shift-xor.md
│ │ │ │ ├── Backward SNR DAWG Matching.md
│ │ │ │ ├── Backward-Oracle-Matching.md
│ │ │ │ ├── index.md
│ │ │ │ ├── Double Forward DAWG Matching.md
│ │ │ │ ├── Extended Backward Oracle Matching.md
│ │ │ │ └── Forward Backward Oracle Matching.md
│ │ │ ├── Comparison of Characters
│ │ │ │ ├── Knuth-Morris-Prat.md
│ │ │ │ ├── Horspool.md
│ │ │ │ ├── Colussi.md
│ │ │ │ ├── Brute-Force.md
│ │ │ │ ├── Not-So-Naive.md
│ │ │ │ ├── Zhu-Takaoka.md
│ │ │ │ ├── Enhanced RS-A.md
│ │ │ │ ├── Quick-Search.md
│ │ │ │ ├── Galil-Giancarlo.md
│ │ │ │ ├── Reverse-Colussi.md
│ │ │ │ ├── Enhanced ERS-A.md
│ │ │ │ ├── Four Sliding Windows.md
│ │ │ │ ├── Enhanced Two Sliding Windows.md
│ │ │ │ ├── Simple String Matching.md
│ │ │ │ ├── Smith.md
│ │ │ │ ├── Maximal-Shift.md
│ │ │ │ ├── Apostolico-Crochemore.md
│ │ │ │ ├── Apostolico-Giancarlo.md
│ │ │ │ ├── Enhanced Berry-Ravindran.md
│ │ │ │ ├── Morris-Pratt.md
│ │ │ │ ├── Karp-Rabin.md
│ │ │ │ ├── Optimal-Mismatch.md
│ │ │ │ ├── String-Matching on Ordered Alphabet.md
│ │ │ │ ├── Max Shift Horspool.md
│ │ │ │ ├── Sheik-Sumit-Anindya-Balakrishnan-Sekar.md
│ │ │ │ ├── Boyer-Moore-Horspool using Probabilities.md
│ │ │ │ ├── Max Shift Boyer-Moore.md
│ │ │ │ ├── 2-Block Boyer-Moore.md
│ │ │ │ ├── Raita.md
│ │ │ │ ├── Wu-Manber for Single Pattern Matching.md
│ │ │ │ ├── Boyer-Moore.md
│ │ │ │ ├── Tailed-Substring.md
│ │ │ │ ├── Alpha-Skip-Search.md
│ │ │ │ ├── Backward-Fast-Search.md
│ │ │ │ ├── Knuth-Morris-Pratt Skip-Search.md
│ │ │ │ ├── Skip-Search.md
│ │ │ │ ├── Two-Way.md
│ │ │ │ ├── Ahmed-Kaykobad-Chowdhury.md
│ │ │ │ ├── Forward-Fast-Search.md
│ │ │ │ ├── Genomic Rapid Algo for String Pm.md
│ │ │ │ ├── Two Sliding Windows.md
│ │ │ │ ├── Tuned-Boyer-Moore.md
│ │ │ │ ├── Skip-Search using q-grams.md
│ │ │ │ ├── Thathoo-Virmani-Sai-Balakrishnan-Sekar.md
│ │ │ │ ├── Hashq using Multiple Hashing Functions.md
│ │ │ │ ├── Fast-Search using Multiple Windows.md
│ │ │ │ ├── TVSBS using Multiple Windows.md
│ │ │ │ ├── Berry-Ravindran.md
│ │ │ │ ├── Bounded Boyer-Moore.md
│ │ │ │ ├── Bounded Fast-Search.md
│ │ │ │ ├── Galil-Seiferas.md
│ │ │ │ ├── Bounded Forward-Fast-Search.md
│ │ │ │ ├── Turbo-Boyer-Moore.md
│ │ │ │ ├── Boyer-Moore-Horspool with q-grams.md
│ │ │ │ ├── Quantum Leap Quick-Search.md
│ │ │ │ ├── Franek-Jennings-Smyth.md
│ │ │ │ ├── Improved Occurrence Heuristics.md
│ │ │ │ ├── Worst Occurrence Heuristics.md
│ │ │ │ ├── Fast-Search.md
│ │ │ │ ├── Jumping Occurrence Heuristics.md
│ │ │ │ └── index.md
│ │ │ ├── Bit Parallelism
│ │ │ │ ├── Bit parallel Wide Window.md
│ │ │ │ ├── Backward-Nondeterministic-DAWG-Matching.md
│ │ │ │ ├── BNDM for Long patterns.md
│ │ │ │ ├── Horspool with BNDM test.md
│ │ │ │ ├── BNDM with Horspool Shift.md
│ │ │ │ ├── Simplified BNDM with loop-unrolling.md
│ │ │ │ ├── BNDM with loop-unrolling.md
│ │ │ │ ├── FNDM with q-grams.md
│ │ │ │ ├── Forward Nondeterministic DAWG Matching.md
│ │ │ │ ├── BNDM with q-grams.md
│ │ │ │ ├── Simplified BNDM with q-grams.md
│ │ │ │ ├── Fast Average Optimal Shift-Or.md
│ │ │ │ ├── SBNDM using Multiple Windows.md
│ │ │ │ ├── Bit-Parallel2 Wide-Window.md
│ │ │ │ ├── Forward SBNDM using Multiple Windows.md
│ │ │ │ ├── Bit-Parallel Wide-Window2.md
│ │ │ │ ├── Q-Gram Filtering.md
│ │ │ │ ├── Bit-Parallel Length Invariant Matcher.md
│ │ │ │ ├── Shift Vector Matching.md
│ │ │ │ ├── Average Optimal Shift-Or.md
│ │ │ │ ├── Improved Two-Way Shift-Or.md
│ │ │ │ ├── Improved Two-Way Shift-And.md
│ │ │ │ ├── Small Alphabet Bit-Parallel.md
│ │ │ │ ├── BNDMq Long.md
│ │ │ │ ├── Shift-And.md
│ │ │ │ ├── Shift-Or.md
│ │ │ │ ├── index.md
│ │ │ │ ├── Two-Way Nondeterministic DAWG Matching.md
│ │ │ │ ├── Long patterns BNDM.md
│ │ │ │ ├── Two-Way Shift-Or using q-grams.md
│ │ │ │ ├── Simplified BNDM.md
│ │ │ │ ├── Two-Way Shift-And using q-grams.md
│ │ │ │ ├── BNDM with Extended Shifts.md
│ │ │ │ ├── Forward Simplified BNDM.md
│ │ │ │ ├── Forward BNDM.md
│ │ │ │ ├── Forward SBNDM using q-grams and Lookahead.md
│ │ │ │ ├── Factorized BNDM.md
│ │ │ │ └── Factorized Shift-And.md
│ │ │ └── Packed String Matching
│ │ │ │ ├── index.md
│ │ │ │ ├── Super Alphabet Simulation.md
│ │ │ │ ├── Packed Belazzougui-Raffinot.md
│ │ │ │ ├── Packed String Search.md
│ │ │ │ ├── Streaming SIMD Extensions Filter.md
│ │ │ │ ├── Exact Packed String Matching.md
│ │ │ │ ├── Packed Belazzougui.md
│ │ │ │ └── Crochemore-Perrin algorithm using SSE instructions.md
│ │ └── index.mdx
│ └── config.ts
├── pages
│ └── timeline.svg.ts
├── lib
│ ├── graph.ts
│ └── braindb.mjs
└── styles
│ └── custom.css
├── tsconfig.json
├── .vscode
├── extensions.json
└── launch.json
├── .gitignore
├── plugins
└── remark-modified-time.mjs
├── public
└── favicon.svg
├── package.json
├── README.md
├── astro.config.mjs
└── references.txt
/netlify.toml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "astro/tsconfigs/strict",
3 | "exclude": [
4 | "dist"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["astro-build.astro-vscode"],
3 | "unwantedRecommendations": []
4 | }
5 |
--------------------------------------------------------------------------------
/src/components/Hero.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Publications from "./Publications.astro";
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/components/GraphPage.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Graph from "./Graph.astro";
3 | import { getGraph } from "../lib/graph";
4 | const graph = await getGraph();
5 | ---
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/content/docs/tags.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tags
3 | tableOfContents: false
4 | prev: false
5 | next: false
6 | ---
7 | import TagList from "../../components/TagList.astro";
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/content/docs/graph.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Graph
3 | tableOfContents: false
4 | prev: false
5 | next: false
6 | ---
7 |
8 | import GraphPage from "../../components/GraphPage.astro";
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/content/docs/recent.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Recently changed
3 | tableOfContents: false
4 | prev: false
5 | next: false
6 | ---
7 | import RecentChanges from "../../components/RecentChanges.astro";
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/content/docs/alphabetical.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Alphabetical index
3 | tableOfContents: false
4 | prev: false
5 | next: false
6 | ---
7 | import Alphabetical from "../../components/Alphabetical.astro";
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "command": "./node_modules/.bin/astro dev",
6 | "name": "Development server",
7 | "request": "launch",
8 | "type": "node-terminal"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # build output
2 | dist/
3 | # generated types
4 | .astro/
5 |
6 | # dependencies
7 | node_modules/
8 |
9 | # logs
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 | pnpm-debug.log*
14 |
15 |
16 | # environment variables
17 | .env
18 | .env.production
19 |
20 | # macOS-specific files
21 | .DS_Store
22 |
23 | .braindb
24 |
--------------------------------------------------------------------------------
/plugins/remark-modified-time.mjs:
--------------------------------------------------------------------------------
1 | import { execSync } from "child_process";
2 |
3 | export function remarkModifiedTime() {
4 | return function (_tree, file) {
5 | const filepath = file.history[0];
6 | const result = execSync(`git log -1 --pretty="format:%cI" "${filepath}"`);
7 | file.data.astro.frontmatter.lastUpdated = result.toString();
8 | };
9 | }
10 |
--------------------------------------------------------------------------------
/src/components/TableOfContents.astro:
--------------------------------------------------------------------------------
1 | ---
2 | // https://github.com/withastro/starlight/blob/main/packages/starlight/components/TableOfContents.astro
3 | import type { Props } from "@astrojs/starlight/props";
4 | import Default from "@astrojs/starlight/components/TableOfContents.astro";
5 | import Backlinks from "./Backlinks.astro";
6 | ---
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/content/config.ts:
--------------------------------------------------------------------------------
1 | import { z, defineCollection } from "astro:content";
2 | import { docsSchema, i18nSchema } from "@astrojs/starlight/schema";
3 |
4 | export const collections = {
5 | docs: defineCollection({
6 | schema: docsSchema({
7 | extend: z.object({
8 | tags: z.array(z.string()).optional(),
9 | }),
10 | }),
11 | }),
12 | i18n: defineCollection({ type: "data", schema: i18nSchema() }),
13 | };
14 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Forward-DAWG-Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward-DAWG-Matching
3 | date: 1994
4 | abbreviation: FDM
5 | sidebar:
6 | order: 65
7 | tags:
8 | - automata
9 | ---
10 |
11 | It is a linear algorithm using the suffix automaton of the pattern
12 |
13 | Appeared in:
14 |
15 | - [35]: Crochemore, M., Rytter, W.: Text Algorithms. Oxford University Press (1994), http://www-igm.univ-mlv.fr/~mac/REC/B1.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Backward-DAWG-Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Backward-DAWG-Matching
3 | date: 1994
4 | abbreviation: BDM
5 | sidebar:
6 | order: 66
7 | tags:
8 | - automata
9 | ---
10 |
11 | Variant of [[Reverse-Factor]]. It uses the Directed Acyclic Word Graph of the pattern
12 |
13 | Appeared in:
14 |
15 | - [35]: Crochemore, M., Rytter, W.: Text Algorithms. Oxford University Press (1994), http://www-igm.univ-mlv.fr/~mac/REC/B1.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Knuth-Morris-Prat.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Knuth-Morris-Prat
3 | date: 1977
4 | abbreviation: KMP
5 | sidebar:
6 | order: 3
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Linear algorithm. Improvement of [[Morris-Pratt]].
12 |
13 | Appeared in:
14 |
15 | - [74]: Knuth, D.E., Jr., J.H.M., Pratt, V.R.: Fast pattern matching in strings. SIAM J. Comput. 6(2), 323–350 (1977), http://dx.doi.org/10.1137/0206024
16 |
--------------------------------------------------------------------------------
/src/components/PageFrame.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import type { Props } from "@astrojs/starlight/props";
3 | import Default from "@astrojs/starlight/components/PageFrame.astro";
4 | import LinkPreview from "./LinkPreview.astro";
5 | ---
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
--------------------------------------------------------------------------------
/src/pages/timeline.svg.ts:
--------------------------------------------------------------------------------
1 | import { publications } from "../components/publications";
2 | import { dotTimeline } from "../components/timeline";
3 | import { Graphviz as GraphvizWasm } from "@hpcc-js/wasm/graphviz";
4 | const graphviz = await GraphvizWasm.load();
5 |
6 | export async function GET({}) {
7 | let svg = graphviz.dot(dotTimeline({ items: await publications() }));
8 | return new Response(svg, {
9 | headers: { "Content-Type": "image/svg+xml" },
10 | });
11 | }
12 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Horspool.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Horspool
3 | date: 1980
4 | abbreviation: HOR
5 | sidebar:
6 | order: 5
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Boyer-Moore]]. It uses only a modification if the occurrence heuristics.
12 |
13 | Appeared in:
14 |
15 | - [65]: Horspool, R.N.: Practical fast searching in strings. Softw., Pract. Exper. 10(6), 501–506 (1980), http://dx.doi.org/10.1002/spe.4380100608
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Colussi.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Colussi
3 | date: 1991
4 | abbreviation: COL
5 | sidebar:
6 | order: 16
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Refinement of [[Knuth-Morris-Prat]] using a 2-factorization of the pattern
12 |
13 | Appeared in:
14 |
15 | - [29]: Colussi, L.: Correctness and efficiency of the pattern matching algorithms. Inf. Comput. 95(2), 225–251 (1991), http://dx.doi.org/10.1016/0890-5401(91)90046-5
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Brute-Force.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Brute-Force
3 | date: 0
4 | abbreviation: BF
5 | sidebar:
6 | order: 1
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Naive algorithm for the string matching problem. It works in $O(nm)$-time
12 |
13 | Appeared in:
14 |
15 | - [31]: Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C.: Introduction to Algorithms (3. ed.). MIT Press (2009), http://mitpress.mit.edu/books/introduction-algorithms
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Not-So-Naive.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Not-So-Naive
3 | date: 1993
4 | abbreviation: NSN
5 | sidebar:
6 | order: 22
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Brute-Force]]. It uses constant extra space and works in $O(nm)$-time.
12 |
13 | Appeared in:
14 |
15 | - [62]: Hancart, C.: Analyse exacte et en moyenne d’algorithmes de recherche d’un motif dans un texte. Th`ese de doctorat, Universit´e Paris 7 (1993)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Zhu-Takaoka.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Zhu-Takaoka
3 | date: 1987
4 | abbreviation: ZT
5 | sidebar:
6 | order: 9
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Horspool]] which uses two characters for computing the occurrence heuristics.
12 |
13 | Appeared in:
14 |
15 | - [101]: Zhu, R.F., Takaoka, T.: On improving the average case of the Boyer-Moore string matching algorithm. J. Inform. Process. 10(3), 173–177 (1987)
16 |
--------------------------------------------------------------------------------
/src/components/Publications.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Timeline from "./Timeline.astro";
3 | import { publications } from "./publications";
4 |
5 | interface Props {
6 | fullWidth?: boolean;
7 | }
8 |
9 | const { fullWidth } = Astro.props;
10 |
11 | const items = await publications();
12 | ---
13 |
14 |
15 |
16 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Bit parallel Wide Window.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bit parallel Wide Window
3 | date: 2005
4 | abbreviation: BWW
5 | sidebar:
6 | order: 94
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Wide Window]]
12 |
13 | Appeared in:
14 |
15 | - [63]: He, L., Fang, B., Sui, J.: The wide window string matching algorithm. Theor. Comput. Sci. 332(1-3), 391–404 (2005), http://dx.doi.org/10.1016/j.tcs.2004.12.002
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Enhanced RS-A.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Enhanced RS-A
3 | date: 2013
4 | abbreviation: ERSA
5 | sidebar:
6 | order: 52
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Enhanced Berry-Ravindran]] and [[Two Sliding Windows]].
12 |
13 | Appeared in:
14 |
15 | - [94]: Suleiman, D., Hudaib, A., Al-Anani, A., R., A.K., Itriq, M.: Ers-a algorithm for pattern matching. Middle East Journal of Scientific Research 15, 1067–1075 (2013)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Quick-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Quick-Search
3 | date: 1990
4 | abbreviation: QS
5 | sidebar:
6 | order: 10
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Horspool]]. It uses the character which follows the current window to compute the occurrence heuristics.
12 |
13 | Appeared in:
14 |
15 | - [96]: Sunday, D.: A very fast substring search algorithm. Commun. ACM 33(8), 132–142 (1990), http://doi.acm.org/10.1145/79173.79184
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Galil-Giancarlo.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Galil-Giancarlo
3 | date: 1992
4 | abbreviation: GG
5 | sidebar:
6 | order: 18
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Refinement of [[Colussi]] which performs at most $4n/3$ inspections in the worst case.
12 |
13 | Appeared in:
14 |
15 | - [59]: Galil, Z., Giancarlo, R.: On the exact complexity of string matching: Upper bounds. SIAM J. Comput. 21(3), 407–437 (1992), http://dx.doi.org/10.1137/0221028
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Succint Backward DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Succint Backward DAWG Matching
3 | date: 2008
4 | abbreviation: SBDM
5 | sidebar:
6 | order: 75
7 | tags:
8 | - automata
9 | ---
10 |
11 | Variant of [[Backward-DAWG-Matching]]. It is based on the combination of compressed self-indexes and BDM
12 |
13 | Appeared in:
14 |
15 | - [57]: Fredriksson, K.: Succinct backward-dawg-matching. ACM Journal of Experimental Algorithmics 13 (2008), http://doi.acm.org/10.1145/1412228.1455263
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Reverse-Colussi.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Reverse-Colussi
3 | date: 1994
4 | abbreviation: RCOL
5 | sidebar:
6 | order: 23
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Colussi]] and [[Boyer-Moore]]. It works in linear time and performs at most $2n$ character inspections.
12 |
13 | Appeared in:
14 |
15 | - [30]: Colussi, L.: Fastest pattern matching in strings. J. Algorithms 16(2), 163–189 (1994), http://dx.doi.org/10.1006/jagm.1994.1008
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Enhanced ERS-A.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Enhanced ERS-A
3 | date: 2015
4 | abbreviation: EERSA
5 | sidebar:
6 | order: 58
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Enhanced RS-A]] and [[Enhanced Two Sliding Windows]].
12 |
13 | Appeared in:
14 |
15 | - [95]: Suleiman, D., Itriq, M., Al-Anani, A., Al-Khalid, R., Hudaib, A.: Enhancing ersa algorithm for pattern matching (eers-a). Journal of Software Engineering and Applications 8, 143–153 (2015)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Four Sliding Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Four Sliding Windows
3 | date: 2015
4 | abbreviation: FSW
5 | sidebar:
6 | order: 59
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Enhanced RS-A]] using four sliding windows.
12 |
13 | Appeared in:
14 |
15 | - [68]: Hudaib, A., Al-Khalid, R., Al-Anani, A., Itriq, M., Suleiman, D.: Four sliding windows pattern matching algorithm (fsw). Journal of Software Engineering and Applications 8, 154–165 (2015)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Enhanced Two Sliding Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Enhanced Two Sliding Windows
3 | date: 2012
4 | abbreviation: ETSW
5 | sidebar:
6 | order: 49
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Two Sliding Windows]] and [[Berry-Ravindran]].
12 |
13 | Appeared in:
14 |
15 | - [71]: Itriq, M., Hudaib, A., Al-Anani, A., Al-Khalid, R., Suleiman, D.: Enhanced two sliding windows algorithm for pattern matching (etsw). Journal of American Science 8, 60–616 (2012)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Simple String Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simple String Matching
3 | date: 2015
4 | abbreviation: SSM
5 | sidebar:
6 | order: 56
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Modification of [[Horspool]]. It scans the text from left to right and matches the pattern from right to left.
12 |
13 | Appeared in:
14 |
15 | - [2]: Al-Ssulami, A.M.: Hybrid string matching algorithm with a pivot. J. Information Science 41(1), 82–88 (2015), http://dx.doi.org/10.1177/0165551514555668
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Smith.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Smith
3 | date: 1991
4 | abbreviation: SMITH
5 | sidebar:
6 | order: 17
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Horspool]] and [[Quick-Search]] which takes the maximum of the shifts proposed by the two occurrences heuristics.
12 |
13 | Appeared in:
14 |
15 | - [93]: Smith, P.D.: Experiments with a very fast substring search algorithm. Softw., Pract. Exper. 21(10), 1065–1074 (1991), http://dx.doi.org/10.1002/spe.4380211006
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Reverse-Factor.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Reverse-Factor
3 | date: 1992
4 | abbreviation: RF
5 | sidebar:
6 | order: 62
7 | tags:
8 | - automata
9 | ---
10 |
11 | Combination of [[Deterministic-Finite-Automaton]] and [[Boyer-Moore]]. It uses the suffix automaton of the reverse of the pattern. It works in $O(nm)$ worst case time.
12 |
13 | Appeared in:
14 |
15 | - [77]: Lecroq, T.: A variation on the boyer-moore algorithm. Theor. Comput. Sci. 92(1), 119–144 (1992), http://dx.doi.org/10.1016/0304-3975(92)90139-7
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Maximal-Shift.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Maximal-Shift
3 | date: 1990
4 | abbreviation: MS
5 | sidebar:
6 | order: 12
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Variation of [[Quick-Search]] where pattern characters are scanned from the one which will lead to a larger shift to the one which will lead to a shorter shift
12 |
13 | Appeared in:
14 |
15 | - [96]: Sunday, D.: A very fast substring search algorithm. Commun. ACM 33(8), 132–142 (1990), http://doi.acm.org/10.1145/79173.79184
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Apostolico-Crochemore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Apostolico-Crochemore
3 | date: 1991
4 | abbreviation: AC
5 | sidebar:
6 | order: 13
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Modification of [[Knuth-Morris-Prat]]. It performs at most $3n/2$ characters inspections in the worst case.
12 |
13 | Appeared in:
14 |
15 | - [6]: Apostolico, A., Crochemore, M.: Optimal canonization of all substrings of a string. Inf. Comput. 95(1), 76–95 (1991), http://dx.doi.org/10.1016/0890-5401(91)90016-U
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Apostolico-Giancarlo.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Apostolico-Giancarlo
3 | date: 1986
4 | abbreviation: AG
5 | sidebar:
6 | order: 7
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Variant of [[Boyer-Moore]]. It works in $O(n)$-time complexity and performs $3n/2$ comparisons in the worst case.
12 |
13 | Appeared in:
14 |
15 | - [7]: Apostolico, A., Giancarlo, R.: The boyer-moore-galil string searching strategies revisited. SIAM J. Comput. 15(1), 98–105 (1986), http://dx.doi.org/10.1137/0215007
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Enhanced Berry-Ravindran.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Enhanced Berry-Ravindran
3 | date: 2012
4 | abbreviation: RSA
5 | sidebar:
6 | order: 51
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Variant of [[Berry-Ravindran]] using four characters to compute the occurrence heuristics
12 |
13 | Appeared in:
14 |
15 | - [90]: Senapati, K., Mal, S., Sahoo, G.: Rs-a fast pattern matching algorithm for biological sequences. International Journal of Engineering and Innovative Technology 1, 116–118 (2012)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Morris-Pratt.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Morris-Pratt
3 | date: 1970
4 | abbreviation: MP
5 | sidebar:
6 | order: 2
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | First linear algorithm scanning the text and the pattern from left to right.
12 | It derives from [[Brute-Force]]. Preprocessing of the pattern in $O(m)$-time and -space.
13 |
14 | Appeared in:
15 |
16 | - [80]: Morris, Jr, J.H., Pratt, V.R.: A linear pattern-matching algorithm. Report 40, University of California, Berkeley (1970)
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Karp-Rabin.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Karp-Rabin
3 | date: 1987
4 | abbreviation: KR
5 | sidebar:
6 | order: 8
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | First filter algorithm using an hashing function. It works in $O(mn)$-time complexity but has an $O(n + m)$ expected running time.
12 |
13 | Appeared in:
14 |
15 | - [73]: Karp, R.M., Rabin, M.O.: Efficient randomized pattern-matching algorithms. IBM Journal of Research and Development 31(2), 249–260 (1987), http://dx.doi.org/10.1147/rd.312.0249
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Optimal-Mismatch.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Optimal-Mismatch
3 | date: 1990
4 | abbreviation: OM
5 | sidebar:
6 | order: 11
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Variation of [[Quick-Search]] using probabilities of characters. It compares the pattern and the text proceeding from the less frequent to the more frequent character.
12 |
13 | Appeared in:
14 |
15 | - [96]: Sunday, D.: A very fast substring search algorithm. Commun. ACM 33(8), 132–142 (1990), http://doi.acm.org/10.1145/79173.79184
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/String-Matching on Ordered Alphabet.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: String-Matching on Ordered ALphabet
3 | date: 1992
4 | abbreviation: SMOA
5 | sidebar:
6 | order: 20
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | It uses constant extra space and achieves a linear time complexity. It inspects at most $6n + 5$ characters.
12 |
13 | Appeared in:
14 |
15 | - [32]: Crochemore, M.: String-matching on ordered alphabets. Theor. Comput. Sci. 92(1), 33–47 (1992), http://dx.doi.org/10.1016/0304-3975(92)90134-2
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Backward-Nondeterministic-DAWG-Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Backward-Nondeterministic-DAWG-Matching
3 | date: 1998
4 | abbreviation: BNDM
5 | sidebar:
6 | order: 83
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Backward-DAWG-Matching]].
12 |
13 | Appeared in:
14 |
15 | - [82]: Navarro, G., Raffinot, M.: A bit-parallel approach to suffix automata: Fast extended string matching. In: Farach-Colton [41], pp. 14–33, http://dx.doi.org/10.1007/BFb003077822 Simone Faro
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Max Shift Horspool.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Max Shift Horspool
3 | date: 2012
4 | abbreviation: MSH
5 | sidebar:
6 | order: 48
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Horspool]] and [[Boyer-Moore]]. It takes the maximum shift proposed by the two occurrence heuristics.
12 |
13 | Appeared in:
14 |
15 | - [89]: Sahli, M., Shibuya, T.: Max-shift BM and max-shift horspool: Practical fast exact string matching algorithms. JIP 20(2), 419–425 (2012), http://dx.doi.org/10.2197/ipsjjip.20.419
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Sheik-Sumit-Anindya-Balakrishnan-Sekar.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sheik-Sumit-Anindya-Balakrishnan-Sekar
3 | date: 2004
4 | abbreviation: SSABS
5 | sidebar:
6 | order: 33
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Quick-Search]] and [[Raita]]
12 |
13 | Appeared in:
14 |
15 | - [91]: Sheik, S.S., Aggarwal, S.K., Poddar, A., Balakrishnan, N., Sekar, K.: A FAST pattern matching algorithm. Journal of Chemical Information and Modeling 44(4), 1251–1256 (2004), http://dx.doi.org/10.1021/ci030463z
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/BSDMqx using multiple windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BSDMqx using multiple windows
3 | date: 2016
4 | abbreviation: BSDMqxw
5 | sidebar:
6 | order: 80
7 | tags:
8 | - automata
9 | ---
10 |
11 | Improvement of [[BSDM using q-grams and shift-xor]] which uses multiple sliding windows.
12 |
13 | Appeared in:
14 |
15 | - [42]: Faro, S.: Evaluation and improvement of fast algorithms for exact matching on genome sequences. In: 3rd Internanional Conference on Algorithms for Computational Biology. Lecture Notes in Computer Science, Springer (2016)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Boyer-Moore-Horspool using Probabilities.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Boyer-Moore-Horspool using Probabilities
3 | date: 2006
4 | abbreviation: PBMH
5 | sidebar:
6 | order: 35
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Optimal-Mismatch]] and [[Horspool]].
12 |
13 | Appeared in:
14 |
15 | - [84]: Nebel, M.E.: Fast string matching by using probabilities: On an optimal mismatch variant of horspool’s algorithm. Theor. Comput. Sci. 359(1-3), 329–343 (2006), http://dx.doi.org/10.1016/j.tcs.2006.05.028
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Max Shift Boyer-Moore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Max Shift Boyer-Moore
3 | date: 2012
4 | abbreviation: MSBM
5 | sidebar:
6 | order: 47
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Boyer-Moore]] and [[Horspool]]. It takes the maximum shift proposed by the two occurrence heuristics.
12 |
13 | Appeared in:
14 |
15 | - [89]: Sahli, M., Shibuya, T.: Max-shift BM and max-shift horspool: Practical fast exact string matching algorithms. JIP 20(2), 419–425 (2012), http://dx.doi.org/10.2197/ipsjjip.20.419
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/2-Block Boyer-Moore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 2-Block Boyer-Moore
3 | date: 2007
4 | abbreviation: 2BLOCK
5 | sidebar:
6 | order: 37
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Boyer-Moore]] performing a constant number of inspections in the worst case.
12 |
13 | Appeared in:
14 |
15 | - [97]: Sustik, M., Moore, J.: String searching over small alphabets. In: Technical Report TR-07-62. Department of Computer Sciences, University of Texas at Austin (2007) Exact Online String Matching Bibliography 23
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Raita.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Raita
3 | date: 1992
4 | abbreviation: RAITA
5 | sidebar:
6 | order: 19
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Modification of [[Horspool]]. It first compare the last character, then the first, and finally the middle character. If no mismatch occurs all other characters are compared.
12 |
13 | Appeared in:
14 |
15 | - [88]: Raita, T.: Tuning the boyer-moore-horspool string searching algorithm. Softw., Pract. Exper. 22(10), 879–884 (1992), http://dx.doi.org/10.1002/spe.4380221006
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Wu-Manber for Single Pattern Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Wu-Manber for Single Pattern Matching
3 | date: 2007
4 | abbreviation: HASHq
5 | sidebar:
6 | order: 38
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Horspool]] using a super alphabet. It computes a fingerprint of each q-gram in the pattern using an hash function.
12 |
13 | Appeared in:
14 |
15 | - [78]: Lecroq, T.: Fast exact string matching algorithms. Inf. Process. Lett. 102(6), 229–235 (2007), http://dx.doi.org/10.1016/j.ipl.2007.01.002
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Turbo-Reverse-Factor.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Turbo-Reverse-Factor
3 | date: 1994
4 | abbreviation: TRF
5 | sidebar:
6 | order: 64
7 | tags:
8 | - automata
9 | ---
10 |
11 | Refinement of [[Reverse-Factor]]. It remembers the characters matched in the previuos attempt. It’s complexity id $O(n)$ in time.
12 |
13 | Appeared in:
14 |
15 | - [33]: Crochemore, M., Czumaj, A., Gasieniec, L., Jarominek, S., Lecroq, T., Plandowski, W., Rytter, W.: Speeding up two string-matching algorithms. Algorithmica 12(4/5), 247–267 (1994), http://dx.doi.org/10.1007/BF01185427
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Linear DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Linear DAWG Matching
3 | date: 2005
4 | abbreviation: LDM
5 | sidebar:
6 | order: 70
7 | tags:
8 | - automata
9 | ---
10 |
11 | Combination of [[Backward-DAWG-Matching]] and [[Deterministic-Finite-Automaton]]. It uses the suffix automaton of the reverse of the pattern deterministic finite state automaton of the pattern
12 |
13 | Appeared in:
14 |
15 | - [63]: He, L., Fang, B., Sui, J.: The wide window string matching algorithm. Theor. Comput. Sci. 332(1-3), 391–404 (2005), http://dx.doi.org/10.1016/j.tcs.2004.12.002
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Wide Window.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Wide Window
3 | date: 2005
4 | abbreviation: WW
5 | sidebar:
6 | order: 69
7 | tags:
8 | - automata
9 | ---
10 |
11 | Combination of [[Forward-DAWG-Matching]] and [[Reverse-Factor]]. It uses the suffix automaton of the pattern and the prefix automaton of the reverse of the pattern. It has a linear worst case time complexity.
12 |
13 | Appeared in:
14 |
15 | - [63]: He, L., Fang, B., Sui, J.: The wide window string matching algorithm. Theor. Comput. Sci. 332(1-3), 391–404 (2005), http://dx.doi.org/10.1016/j.tcs.2004.12.002
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Boyer-Moore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Boyer-Moore
3 | date: 1977
4 | abbreviation: BM
5 | sidebar:
6 | order: 4
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Introduces the sliding window approach and the scanning of the window from right to left. It works in $O(nm)$-time. It uses the occurrence and the good-suffix heuristics. It derives from [[Brute-Force]]
12 |
13 | Appeared in:
14 |
15 | - [18]: Boyer, R.S., Moore, J.S.: A fast string searching algorithm. Commun. ACM 20(10), 762–772 (1977), http://doi.acm.org/10.1145/359842.359859
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Tailed-Substring.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tailed-Substring
3 | date: 2004
4 | abbreviation: TS
5 | sidebar:
6 | order: 32
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Brute-Force]] using a variant of the occurrence heuristics in [[Horspool]]. It uses constant extra space
12 |
13 | Appeared in:
14 |
15 | - [19]: Cantone, D., Faro, S.: Searching for a substring with constant extra-space complexity. In: Ferragina, P., Grossi, R. (eds.) Proc. of Third International Conference on Fun with algorithms. pp. 118–131 (2004)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Alpha-Skip-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Alpha-Skip-Search
3 | date: 1998
4 | abbreviation: ASKIP
5 | sidebar:
6 | order: 25
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Skip-Search]]. It uses buckets of positions for each factor of length log $σ(m)$ of the pattern.
12 |
13 | Appeared in:
14 |
15 | - [28]: Charras, C., Lecroq, T., Pehoushek, J.D.: A very fast string matching algorithm for small alphabeths and long patterns (extended abstract). In: Farach-Colton [41], pp. 55–64, http://dx.doi.org/10.1007/BFb0030780
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Deterministic-Finite-Automaton.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Deterministic-Finite-Automaton
3 | date: 0
4 | abbreviation: DFA
5 | sidebar:
6 | order: 61
7 | tags:
8 | - automata
9 | ---
10 |
11 | Linear algorithm using a deterministic finite state automaton recognizing all string whose suffix is equal to the pattern. Construction of the automaton can be done in $O(m)$-time.
12 |
13 | Appeared in:
14 |
15 | - [31]: Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C.: Introduction to Algorithms (3. ed.). MIT Press (2009), http://mitpress.mit.edu/books/introduction-algorithms
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Backward-Fast-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Backward-Fast-Search
3 | date: 2004
4 | abbreviation: BFS
5 | sidebar:
6 | order: 31
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Boyer-Moore]] and [[Horspool]]. It computes the good-suffix heuristics using information about the mismatching character
12 |
13 | Appeared in:
14 |
15 | - [22]: Cantone, D., Faro, S.: Fast-search algorithms: New efficient variants of the boyer-moore pattern-matching algorithm. Journal of Automata, Languages and Combinatorics 10(5/6), 589–608 (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Knuth-Morris-Pratt Skip-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Knuth-Morris-Pratt Skip-Search
3 | date: 1998
4 | abbreviation: KMPS
5 | sidebar:
6 | order: 26
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Skip-Search]] using shift tables in [[Morris-Pratt]] and [[Knuth-Morris-Prat]].
12 |
13 | Appeared in:
14 |
15 | - [28]: Charras, C., Lecroq, T., Pehoushek, J.D.: A very fast string matching algorithm for small alphabeths and long patterns (extended abstract). In: Farach-Colton [41], pp. 55–64, http://dx.doi.org/10.1007/BFb0030780
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Skip-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Skip-Search
3 | date: 1998
4 | abbreviation: SKIP
5 | sidebar:
6 | order: 24
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | It introduces the use of buckets of positions for each character of the alphabet. It works in $O(nm)$-time but has a linear average behavior
12 |
13 | Appeared in:
14 |
15 | - [28]: Charras, C., Lecroq, T., Pehoushek, J.D.: A very fast string matching algorithm for small alphabeths and long patterns (extended abstract). In: Farach-Colton [41], pp. 55–64, http://dx.doi.org/10.1007/BFb0030780
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/BNDM for Long patterns.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BNDM for Long patterns
3 | date: 2000
4 | abbreviation: BNDML
5 | sidebar:
6 | order: 84
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Modification of [[Backward-Nondeterministic-DAWG-Matching]] using multiple words for simulating the nondeterministic automata of long patterns.
12 |
13 | Appeared in:
14 |
15 | - [83]: Navarro, G., Raffinot, M.: Fast and flexible string matching by combining bit-parallelism and suffix automata. ACM Journal of Experimental Algorithmics 5, 4 (2000), http://doi.acm.org/10.1145/351827.384246
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Horspool with BNDM test.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Horspool with BNDM test
3 | date: 2005
4 | abbreviation: BMHBNDM
5 | sidebar:
6 | order: 92
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Combination of [[Backward-Nondeterministic-DAWG-Matching]] and [[Horspool]]
12 |
13 | Appeared in:
14 |
15 | - [64]: Holub, J., Durian, B.: Talk: Fast variants of bit parallel approach to suffix automata. In: The Second Haifa Annual International Stringology Research Workshop of the Israeli Science Foundation, http://www.cri.haifa.ac.il/events/2005/string/presentations/Holub.pdf (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Two-Way.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Two-Way
3 | date: 1991
4 | abbreviation: TW
5 | sidebar:
6 | order: 14
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Linear algorithm in the worst case. Divides the pattern in two factors. It proceeds from left to right while scanning the left factor, and proceeds from right to left while scanning the right factor. It inspects at most $2n − m$ characters.
12 |
13 | Appeared in:
14 |
15 | - [34]: Crochemore, M., Perrin, D.: Two-way string matching. J. ACM 38(3), 651–675 (1991), http://doi.acm.org/10.1145/116825.116845
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/BNDM with Horspool Shift.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BNDM with Horspool Shift
3 | date: 2005
4 | abbreviation: BNDMBMH
5 | sidebar:
6 | order: 91
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Combination of [[Backward-Nondeterministic-DAWG-Matching]] and [[Horspool]]
12 |
13 | Appeared in:
14 |
15 | - [64]: Holub, J., Durian, B.: Talk: Fast variants of bit parallel approach to suffix automata. In: The Second Haifa Annual International Stringology Research Workshop of the Israeli Science Foundation, http://www.cri.haifa.ac.il/events/2005/string/presentations/Holub.pdf (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Ahmed-Kaykobad-Chowdhury.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Ahmed-Kaykobad-Chowdhury
3 | date: 2003
4 | abbreviation: AKC
5 | sidebar:
6 | order: 28
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | A variant of [[Apostolico-Giancarlo]] that remembers all the suffixes of the pattern found in the text and that computes the shifts accordingly at the end of each attempt.
12 |
13 | Appeared in:
14 |
15 | - [1]: Ahmed, M., Kaykobad, M., Chowdhury, R.A.: A new string matching algorithm. Int. J. Comput. Math. 80(7), 825–834 (2003), http://dx.doi.org/10.1080/0020716031000087113
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Simplified BNDM with loop-unrolling.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simplified BNDM with loop-unrolling
3 | date: 2005
4 | abbreviation: SBNDM2
5 | sidebar:
6 | order: 90
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Simplified BNDM]] using a blind enrolled loop.
12 |
13 | Appeared in:
14 |
15 | - [64]: Holub, J., Durian, B.: Talk: Fast variants of bit parallel approach to suffix automata. In: The Second Haifa Annual International Stringology Research Workshop of the Israeli Science Foundation, http://www.cri.haifa.ac.il/events/2005/string/presentations/Holub.pdf (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Forward-Fast-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward-Fast-Search
3 | date: 2004
4 | abbreviation: FFS
5 | sidebar:
6 | order: 30
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Fast-Search]] and [[Quick-Search]]. It computes the good-suffix using information about the character following the current window of the text
12 |
13 | Appeared in:
14 |
15 | - [22]: Cantone, D., Faro, S.: Fast-search algorithms: New efficient variants of the boyer-moore pattern-matching algorithm. Journal of Automata, Languages and Combinatorics 10(5/6), 589–608 (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Improved Linear DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Improved Linear DAWG Matching
3 | date: 2006
4 | abbreviation: ILDM1
5 | sidebar:
6 | order: 71
7 | tags:
8 | - automata
9 | ---
10 |
11 | Improvement of [[Linear DAWG Matching]].
12 |
13 | Appeared in:
14 |
15 | - [79]: Liu, C., Wang, Y., Liu, D., Li, D.: Two improved single pattern matching algorithms. In: 16th International Conference on Artificial Reality and Telexistence, ICAT 2006, Hangzhou, China, November 29 - December 1, 2006, Workshops Proceedings. pp. 419–422. IEEE Computer Society (2006), http://dx.doi.org/10.1109/ICAT.2006.134
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/BNDM with loop-unrolling.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BNDM with loop-unrolling
3 | date: 2003
4 | abbreviation: BNDM2
5 | sidebar:
6 | order: 89
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Backward-Nondeterministic-DAWG-Matching]] using a blind enrolled loop.
12 |
13 | Appeared in:
14 |
15 | - [64]: Holub, J., Durian, B.: Talk: Fast variants of bit parallel approach to suffix automata. In: The Second Haifa Annual International Stringology Research Workshop of the Israeli Science Foundation, http://www.cri.haifa.ac.il/events/2005/string/presentations/Holub.pdf (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Introduction
3 | sidebar:
4 | order: -1
5 | ---
6 |
7 | ## Algorithms based on Packed String Matching
8 |
9 | In the packed string matching technique multiple characters are packed into one larger word, so that the characters can be compared in bulk rather than individually. In this context, if the characters of a string are drawn from an alphabet of size $σ$, then $\lfloor \frac{w}{\log σ} \rfloor$ different characters fit in a single word, using $\lceil \log σ \rceil$ bits per characters. The packing factor is $α = \lfloor \frac{w}{\log σ} \rfloor$
10 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Improved Linear DAWG Matching 2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Improved Linear DAWG Matching 2
3 | date: 2006
4 | abbreviation: ILDM2
5 | sidebar:
6 | order: 72
7 | tags:
8 | - automata
9 | ---
10 |
11 | Improvement of [[Linear DAWG Matching]]
12 |
13 | Appeared in:
14 |
15 | - [79]: Liu, C., Wang, Y., Liu, D., Li, D.: Two improved single pattern matching algorithms. In: 16th International Conference on Artificial Reality and Telexistence, ICAT 2006, Hangzhou, China, November 29 - December 1, 2006, Workshops Proceedings. pp. 419–422. IEEE Computer Society (2006), http://dx.doi.org/10.1109/ICAT.2006.134
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Genomic Rapid Algo for String Pm.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Genomic Rapid Algo for String Pm
3 | date: 2009
4 | abbreviation: GRASPm
5 | sidebar:
6 | order: 41
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Modification of [[Horspool]]. It improve the original algorithm using a filtering method based on an hash function computed on 2-grams in the pattern
12 |
13 | Appeared in:
14 |
15 | - [36]: Deusdado, S.A.D., Carvalho, P.: Graspm: an efficient algorithm for exact pattern-matching in genomic sequences. IJBRA 5(4), 385–401 (2009), http://dx.doi.org/10.1504/IJBRA.2009.027510
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Two Sliding Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Two Sliding Windows
3 | date: 2008
4 | abbreviation: TSW
5 | sidebar:
6 | order: 40
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Quick-Search]] using two sliding windows. The first windows slides from left to right while the second slides from right to left.
12 |
13 | Appeared in:
14 |
15 | - [67]: Hudaib, A., Al-Khalid, R., Suleiman, D., Itriq, M., Al-Anani, A.: A fast pattern matching algorithm with two sliding windows (tsw). Journal of Computer Science 4(5), 393–401 (2008) Exact Online String Matching Bibliography 21
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/FNDM with q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: FNDM with q-grams
3 | date: 2009
4 | abbreviation: UFNDMq
5 | sidebar:
6 | order: 102
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Implementation of [[Forward Nondeterministic DAWG Matching]] using q-grams.
12 |
13 | Appeared in:
14 |
15 | - [38]: Durian, B., Holub, J., Peltola, H., Tarhio, J.: Tuning BNDM with q-grams. In: Finocchi, I., Hershberger, J. (eds.) Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments, ALENEX 2009, New York, New York, USA, January 3, 2009. pp. 29–37. SIAM (2009), http://dx.doi.org/10.1137/1.9781611972894.3
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Simplified Forward Backward Oracle Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simplified Forward Backward Oracle Matching
3 | date: 2009
4 | abbreviation: SFBOM
5 | sidebar:
6 | order: 77
7 | tags:
8 | - automata
9 | ---
10 |
11 | Simplification of [[Forward Backward Oracle Matching]].
12 |
13 | Appeared in:
14 |
15 | - [40]: Fan, H., Yao, N., Ma, H.: Fast variants of the backward-oracle-marching algorithm. In: Proceedings of the 2009 Fourth International Conference on Internet Computing for Science and Engineering. pp. 56–59. ICICSE ’09, IEEE Computer Society, Washington, DC, USA (2009), http://dx.doi.org/10.1109/ICICSE.2009.53
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Forward Nondeterministic DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward Nondeterministic DAWG Matching
3 | date: 2005
4 | abbreviation: FNDM
5 | sidebar:
6 | order: 93
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Forward-DAWG-Matching]].
12 |
13 | Appeared in:
14 |
15 | - [64]: Holub, J., Durian, B.: Talk: Fast variants of bit parallel approach to suffix automata. In: The Second Haifa Annual International Stringology Research Workshop of the Israeli Science Foundation, http://www.cri.haifa.ac.il/events/2005/string/presentations/Holub.pdf (2005)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Simplified Extended Backward Oracle Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simplified Extended Backward Oracle Matching
3 | date: 2009
4 | abbreviation: SEBOM
5 | sidebar:
6 | order: 76
7 | tags:
8 | - automata
9 | ---
10 |
11 | Simplification of [[Extended Backward Oracle Matching]].
12 |
13 | Appeared in:
14 |
15 | - [40]: Fan, H., Yao, N., Ma, H.: Fast variants of the backward-oracle-marching algorithm. In: Proceedings of the 2009 Fourth International Conference on Internet Computing for Science and Engineering. pp. 56–59. ICICSE ’09, IEEE Computer Society, Washington, DC, USA (2009), http://dx.doi.org/10.1109/ICICSE.2009.53
16 |
--------------------------------------------------------------------------------
/src/components/LinkPreview.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
25 |
26 |
29 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Simon.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simon
3 | date: 1994
4 | abbreviation: SIM
5 | sidebar:
6 | order: 63
7 | tags:
8 | - automata
9 | ---
10 |
11 | Modification of [[Deterministic-Finite-Automaton]]. It uses the minimal automaton of the pattern.
12 |
13 | Appeared in:
14 |
15 | - [92]: Simon, I.: String matching algorithms and automata. In: Karhum¨aki, J., Maurer, H.A., Rozenberg, G. (eds.) Results and Trends in Theoretical Computer Science, Colloquium in Honor of Arto Salomaa, Graz, Austria, June 10-11, 1994, Proceedings. Lecture Notes in Computer Science, vol. 812, pp. 386–395. Springer (1994), http://dx.doi.org/10.1007/3-540-58131-6_61
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Tuned-Boyer-Moore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tuned-Boyer-Moore
3 | date: 1991
4 | abbreviation: TunBM
5 | sidebar:
6 | order: 15
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Variant of [[Horspool]] which introduces a fast loop with unrolled blind shifts.
12 |
13 | Appeared in:
14 |
15 | - [69]: Hume, A., Sunday, D.: Fast string searching. In: Proceedings of the Summer 1991 USENIX Conference, Nashville, TE, USA, June 1991. pp. 221–234. USENIX Association (1991)
16 | - [70]: Hume, A., Sunday, D.: Fast string searching. Softw., Pract. Exper. 21(11), 1221–1248 (1991), http://dx.doi.org/10.1002/spe.4380211105
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/BNDM with q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BNDM with q-grams
3 | date: 2009
4 | abbreviation: BNDMq
5 | sidebar:
6 | order: 100
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Variant of [[Backward-Nondeterministic-DAWG-Matching]] using a super alphabet implemented with q-grams.
12 |
13 | Appeared in:
14 |
15 | - [38]: Durian, B., Holub, J., Peltola, H., Tarhio, J.: Tuning BNDM with q-grams. In: Finocchi, I., Hershberger, J. (eds.) Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments, ALENEX 2009, New York, New York, USA, January 3, 2009. pp. 29–37. SIAM (2009), http://dx.doi.org/10.1137/1.9781611972894.3
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Simplified BNDM with q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simplified BNDM with q-grams
3 | date: 2009
4 | abbreviation: SBNDMq
5 | sidebar:
6 | order: 101
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Variant of [[Simplified BNDM]] using a super alphabet implemented with q-grams.
12 |
13 | Appeared in:
14 |
15 | - [38]: Durian, B., Holub, J., Peltola, H., Tarhio, J.: Tuning BNDM with q-grams. In: Finocchi, I., Hershberger, J. (eds.) Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments, ALENEX 2009, New York, New York, USA, January 3, 2009. pp. 29–37. SIAM (2009), http://dx.doi.org/10.1137/1.9781611972894.3
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Skip-Search using q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Skip-Search using q-grams
3 | date: 2016
4 | abbreviation: SKIPq
5 | sidebar:
6 | order: 60
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Skip-Search]] and [[Wu-Manber for Single Pattern Matching]]. It computes buckets of positions for the fingerprint of each q-gram in the pattern.
12 |
13 | Appeared in:
14 |
15 | - [43]: Faro, S.: A very fast string matching algorithm based on condensed alphabets. In: Algorithmic Aspects in Information and Management - 10th International Conference, AAIM 2016. Proceedings. Lecture Notes in Computer Science, Springer (2016)
16 |
--------------------------------------------------------------------------------
/public/favicon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Fast Average Optimal Shift-Or.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fast Average Optimal Shift-Or
3 | date: 2005
4 | abbreviation: FAOSO
5 | sidebar:
6 | order: 96
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Practical improvement of [[Average Optimal Shift-Or]].
12 |
13 | Appeared in:
14 |
15 | - [58]: Fredriksson, K., Grabowski, S.: Practical and optimal string matching. In: Consens, M.P., Navarro, G. (eds.) String Processing and Information Retrieval, 12th International Conference, SPIRE 2005, Buenos Aires, Argentina, November 2-4, 2005, Proceedings. Lecture Notes in Computer Science, vol. 3772, pp. 376–387. Springer (2005), http://dx.doi.org/10.1007/11575832_42
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/SBNDM using Multiple Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SBNDM using Multiple Windows
3 | date: 2012
4 | abbreviation: SBNDMw
5 | sidebar:
6 | order: 112
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Simplified BNDM]] using multiple sliding windows
12 |
13 | Appeared in:
14 |
15 | - [51]: Faro, S., Lecroq, T.: A multiple sliding windows approach to speed up string matching algorithms. In: Klasing, R. (ed.) Experimental Algorithms - 11th International Symposium, SEA 2012, Bordeaux, France, June 7-9, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7276, pp. 172–183. Springer (2012), http://dx.doi.org/10.1007/978-3-642-30850-5_16
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/BSDM using q-grams and shift-xor.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BSDM using q-grams and shift-xor
3 | date: 2016
4 | abbreviation: BSDMqx
5 | sidebar:
6 | order: 79
7 | tags:
8 | - automata
9 | ---
10 |
11 | Variant of [[Backward SNR DAWG Matching]]. It computes the DAWG assuming a super alphabet on q-grams of the pattern. The q-grams are associated to a fingerprint value computed by using a shift-xor hash function.
12 |
13 | Appeared in:
14 |
15 | - [42]: Faro, S.: Evaluation and improvement of fast algorithms for exact matching on genome sequences. In: 3rd Internanional Conference on Algorithms for Computational Biology. Lecture Notes in Computer Science, Springer (2016)
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Super Alphabet Simulation.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Super Alphabet Simulation
3 | date: 2002
4 | abbreviation: SAS
5 | sidebar:
6 | order: 118
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | General approach for packed string matching based on a tabulation technique.
12 |
13 | Appeared in:
14 |
15 | - [56]: Fredriksson, K.: Faster string matching with super-alphabets. In: Laender, A.H.F., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 9th International Symposium, SPIRE 2002, Lisbon, Portugal, September 11-13, 2002, Proceedings. Lecture Notes in Computer Science, vol. 2476, pp. 44–57. Springer (2002), http://dx.doi.org/10.1007/3-540-45735-6_5
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Bit-Parallel2 Wide-Window.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bit-Parallel2 Wide-Window
3 | date: 2010
4 | abbreviation: BP2WW
5 | sidebar:
6 | order: 107
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Wide Window]] using two sliding windows inspected in parallel
12 |
13 | Appeared in:
14 |
15 | - [25]: Cantone, D., Faro, S., Giaquinta, E.: Bit-(parallelism)2: Getting to the next level of parallelism. In: Boldi, P., Gargano, L. (eds.) Fun with Algorithms, 5th International Conference, FUN 2010, Ischia, Italy, June 2-4, 2010. Proceedings. 18 Simone Faro Lecture Notes in Computer Science, vol. 6099, pp. 166–177. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13122-6_18
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Forward SBNDM using Multiple Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward SBNDM using Multiple Windows
3 | date: 2012
4 | abbreviation: FSBNDMw
5 | sidebar:
6 | order: 113
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Forward Simplified BNDM]] using multiple sliding windows.
12 |
13 | Appeared in:
14 |
15 | - [51]: Faro, S., Lecroq, T.: A multiple sliding windows approach to speed up string matching algorithms. In: Klasing, R. (ed.) Experimental Algorithms - 11th International Symposium, SEA 2012, Bordeaux, France, June 7-9, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7276, pp. 172–183. Springer (2012), http://dx.doi.org/10.1007/978-3-642-30850-5_16
16 |
--------------------------------------------------------------------------------
/src/components/Timeline.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Graphviz from "./Graphviz.astro";
3 | import { dotTimeline, type TimelineItem } from "./timeline";
4 |
5 | interface Props {
6 | items: TimelineItem[];
7 | /**
8 | * https://www.graphviz.org/doc/info/attrs.html#d:rankdir
9 | */
10 | direction?: "TB" | "BT" | "LR" | "RL";
11 | }
12 |
13 | const src = dotTimeline(Astro.props);
14 | ---
15 |
16 |
17 |
18 |
19 |
20 |
33 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Bit-Parallel Wide-Window2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bit-Parallel Wide-Window2
3 | date: 2010
4 | abbreviation: BPWW2
5 | sidebar:
6 | order: 108
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Wide Window]] using two sliding windows inspected in parallel.
12 |
13 | Appeared in:
14 |
15 | - [25]: Cantone, D., Faro, S., Giaquinta, E.: Bit-(parallelism)2: Getting to the next level of parallelism. In: Boldi, P., Gargano, L. (eds.) Fun with Algorithms, 5th International Conference, FUN 2010, Ischia, Italy, June 2-4, 2010. Proceedings. 18 Simone Faro Lecture Notes in Computer Science, vol. 6099, pp. 166–177. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13122-6_18
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Q-Gram Filtering.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Q-Gram Filtering
3 | date: 2010
4 | abbreviation: QF
5 | sidebar:
6 | order: 106
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | It uses a filtering approach based on consecutive q-grams in the text
12 |
13 | Appeared in:
14 |
15 | - [39]: Durian, B., Peltola, H., Salmela, L., Tarhio, J.: Bit-parallel search algorithms for long patterns. In: Festa, P. (ed.) Experimental Algorithms, 9th International Symposium, SEA 2010, Ischia Island, Naples, Italy, May 20-22, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6049, pp. 129–140. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13193-6_12 Exact Online String Matching Bibliography 19
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Packed Belazzougui-Raffinot.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Packed Belazzougui-Raffinot
3 | date: 2010
4 | abbreviation: PBR
5 | sidebar:
6 | order: 122
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | Efficient packed string matching algorithm which works in $O(nm)$ worst case time complexity
12 |
13 | Appeared in:
14 |
15 | - [12]: Belazzougui, D., Raffinot, M.: Average optimal string matching in packed strings. In: Spirakis, P.G., Serna, M.J. (eds.) Algorithms and Complexity, 8th International Conference, CIAC 2013, Barcelona, Spain, May 22-24, 2013. Proceedings. Lecture Notes in Computer Science, vol. 7878, pp. 37–48. Springer (2013), http://dx.doi.org/10.1007/978-3-642-38233-8_4
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Thathoo-Virmani-Sai-Balakrishnan-Sekar.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Thathoo-Virmani-Sai-Balakrishnan-Sekar
3 | date: 2006
4 | abbreviation: TVSBS
5 | sidebar:
6 | order: 34
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Sheik-Sumit-Anindya-Balakrishnan-Sekar]] and [[Berry-Ravindran]].
12 |
13 | Appeared in:
14 |
15 | - [66]: Huang, Y., Ping, L., Pan, X., Cai, G.: A fast exact pattern matching algorithmfor biological sequences. In: Proceedings of the 2008 International Conference on BioMedical Engineering and Informatics, BMEI 2008, May 28-30, 2008, Sanya, Hainan, China - Volume 1. pp. 8–12. IEEE Computer Society (2008), http://dx.doi.org/10.1109/BMEI.2008.154
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Bit-Parallel Length Invariant Matcher.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bit-Parallel Length Invariant Matcher
3 | date: 2008
4 | abbreviation: BLIM
5 | sidebar:
6 | order: 99
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Quadratic worst case time algorithm using multiple words
12 |
13 | Appeared in:
14 |
15 | - [75]: Külekci, M.O.: A method to overcome computer word size limitation in bit-parallel pattern matching. In: Hong, S., Nagamochi, H., Fukunaga, T. (eds.) Algorithms and Computation, 19th International Symposium, ISAAC 2008, Gold Coast, Australia, December 15-17, 2008. Proceedings. Lecture Notes in Computer Science, vol. 5369, pp. 496–506. Springer (2008), http://dx.doi.org/10.1007/978-3-540-92182-0_45
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Hashq using Multiple Hashing Functions.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Hashq using Multiple Hashing Functions
3 | date: 2012
4 | abbreviation: MHASHq
5 | sidebar:
6 | order: 50
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Wu-Manber for Single Pattern Matching]] using multiple hash functions in order to reduce the number false positives
12 |
13 | Appeared in:
14 |
15 | - [49]: Faro, S., Lecroq, T.: Fast searching in biological sequences using multiple hash functions. In: 12th IEEE International Conference on Bioinformatics & Bioengineering, BIBE 2012, Larnaca, Cyprus, November 11-13, 2012. pp. 175–180. IEEE Computer Society (2012), http://dx.doi.org/10.1109/BIBE.2012.6399669
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Shift Vector Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Shift Vector Matching
3 | date: 2003
4 | abbreviation: SVM
5 | sidebar:
6 | order: 88
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Implementation of [[Boyer-Moore]] using bit parallelism. It remembers characters matched during the last attempt.
12 |
13 | Appeared in:
14 |
15 | - [85]: Peltola, H., Tarhio, J.: Alternative algorithms for bit-parallel string matching. In: Nascimento, M.A., de Moura, E.S., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 10th International Symposium, SPIRE 2003, Manaus, Brazil, October 8-10, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2857, pp. 80–94. Springer (2003), http://dx.doi.org/10.1007/978-3-540-39984-1_7
16 |
--------------------------------------------------------------------------------
/src/components/publications.ts:
--------------------------------------------------------------------------------
1 | import { bdb } from "../lib/braindb.mjs";
2 | import { type TimelineItem } from "./timeline";
3 |
4 | export async function publications() {
5 | return (await bdb.documents())
6 | .map((doc) => {
7 | const fm = doc.frontmatter();
8 | if (!fm.abbreviation) return false;
9 | return {
10 | id: fm.abbreviation as string,
11 | year: fm.date as number,
12 | tooltip: " ", //doc.title(),
13 | // @ts-ignore
14 | class: fm.tags[0],
15 | url: doc.url(),
16 | out: doc
17 | .documentsFrom()
18 | .map((x) => x.frontmatter().abbreviation as string)
19 | .filter(Boolean),
20 | };
21 | })
22 | .filter(Boolean) as TimelineItem[];
23 | }
24 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Average Optimal Shift-Or.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Average Optimal Shift-Or
3 | date: 2005
4 | abbreviation: AOSO
5 | sidebar:
6 | order: 95
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Variant of [[Shift-Or]] using a superimposed pattern. It improves the original algorithm by shifting of more than one position during the scan
12 |
13 | Appeared in:
14 |
15 | - [58]: Fredriksson, K., Grabowski, S.: Practical and optimal string matching. In: Consens, M.P., Navarro, G. (eds.) String Processing and Information Retrieval, 12th International Conference, SPIRE 2005, Buenos Aires, Argentina, November 2-4, 2005, Proceedings. Lecture Notes in Computer Science, vol. 3772, pp. 376–387. Springer (2005), http://dx.doi.org/10.1007/11575832_42
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Improved Two-Way Shift-Or.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Improved Two-Way Shift-Or
3 | date: 2014
4 | abbreviation: TSO
5 | sidebar:
6 | order: 115
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Shift-Or]] using several sliding windows inspected in parallel
12 |
13 | Appeared in:
14 |
15 | - [37]: Durian, B., Chhabra, T., Ghuman, S.S., Hirvola, T., Peltola, H., Tarhio, J.: Improved two-way bit-parallel search. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2014, Prague, Czech Republic, September 1-3, 2014. pp. 71–83. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2014), http://www.stringology.org/event/2014/p08.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Fast-Search using Multiple Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fast-Search using Multiple Windows
3 | date: 2012
4 | abbreviation: FSw
5 | sidebar:
6 | order: 45
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Fast-Search]] using multiple sliding windows. Windows slides from left to right and from right to left
12 |
13 | Appeared in:
14 |
15 | - [51]: Faro, S., Lecroq, T.: A multiple sliding windows approach to speed up string matching algorithms. In: Klasing, R. (ed.) Experimental Algorithms - 11th International Symposium, SEA 2012, Bordeaux, France, June 7-9, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7276, pp. 172–183. Springer (2012), http://dx.doi.org/10.1007/978-3-642-30850-5_16
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Improved Two-Way Shift-And.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Improved Two-Way Shift-And
3 | date: 2014
4 | abbreviation: TSA
5 | sidebar:
6 | order: 114
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Shift-And]] using several sliding windows inspected in parallel.
12 |
13 | Appeared in:
14 |
15 | - [37]: Durian, B., Chhabra, T., Ghuman, S.S., Hirvola, T., Peltola, H., Tarhio, J.: Improved two-way bit-parallel search. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2014, Prague, Czech Republic, September 1-3, 2014. pp. 71–83. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2014), http://www.stringology.org/event/2014/p08.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Backward SNR DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Backward SNR DAWG Matching
3 | date: 2012
4 | abbreviation: BSDM
5 | sidebar:
6 | order: 78
7 | tags:
8 | - automata
9 | ---
10 |
11 | Modification of [[Backward-DAWG-Matching]]. It uses the DAWG constructed on the longest substring of the pattern with no repetitions of characters.
12 |
13 | Appeared in:
14 |
15 | - [50]: Faro, S., Lecroq, T.: A fast suffix automata based algorithm for exact online string matching. In: Moreira, N., Reis, R. (eds.) Implementation and Application of Automata - 17th International Conference, CIAA 2012, Porto, Portugal, July 17-20, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7381, pp. 149–158. Springer (2012), http://dx.doi.org/10.1007/978-3-642-31606-7_13
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Small Alphabet Bit-Parallel.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Small Alphabet Bit-Parallel
3 | date: 2009
4 | abbreviation: SABP
5 | sidebar:
6 | order: 103
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Bit Parallel algorithm designed for searching string over small alphabets. It is based on a position related character matching table.
12 |
13 | Appeared in:
14 |
15 | - [100]: Zhang, G., Zhu, E., Mao, L., Yin, M.: A bit-parallel exact string matching algorithm for small alphabet. In: Deng, X., Hopcroft, J.E., Xue, J. (eds.) Frontiers in Algorithmics, Third International Workshop, FAW 2009, Hefei, China, June 20-23, 2009. Proceedings. Lecture Notes in Computer Science, vol. 5598, pp. 336–345. Springer (2009), http://dx.doi.org/10.1007/978-3-642-02270-8_34
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/BNDMq Long.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BNDMq Long
3 | date: 2010
4 | abbreviation: BQL
5 | sidebar:
6 | order: 105
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Modification of [[Backward-Nondeterministic-DAWG-Matching]] for long patterns. It increases the effective alphabet size by using overlapping q-grams.
12 |
13 | Appeared in:
14 |
15 | - [39]: Durian, B., Peltola, H., Salmela, L., Tarhio, J.: Bit-parallel search algorithms for long patterns. In: Festa, P. (ed.) Experimental Algorithms, 9th International Symposium, SEA 2010, Ischia Island, Naples, Italy, May 20-22, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6049, pp. 129–140. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13193-6_12 Exact Online String Matching Bibliography 19
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/TVSBS using Multiple Windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: TVSBS using Multiple Windows
3 | date: 2012
4 | abbreviation: TVSBSw
5 | sidebar:
6 | order: 46
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Thathoo-Virmani-Sai-Balakrishnan-Sekar]] using multiple sliding windows. Windows slides from left to right and from right to left.
12 |
13 | Appeared in:
14 |
15 | - [51]: Faro, S., Lecroq, T.: A multiple sliding windows approach to speed up string matching algorithms. In: Klasing, R. (ed.) Experimental Algorithms - 11th International Symposium, SEA 2012, Bordeaux, France, June 7-9, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7276, pp. 172–183. Springer (2012), http://dx.doi.org/10.1007/978-3-642-30850-5_16
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Packed String Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Packed String Search
3 | date: 2009
4 | abbreviation: PSS
5 | sidebar:
6 | order: 119
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | Variant of [[Knuth-Morris-Prat]] applied to packed string matching.
12 |
13 | Appeared in:
14 |
15 | - [16]: Bille, P.: Fast searching in packed strings. In: Kucherov, G., Ukkonen, E. (eds.) Combinatorial Pattern Matching, 20th Annual Symposium, CPM 2009, Lille, France, June 22-24, 2009, Proceedings. Lecture Notes in Computer Science, vol. 5577, pp. 116–126. Springer (2009), http://dx.doi.org/10.1007/978-3-642-02441-2_11
16 | - [17]: Bille, P.: Fast searching in packed strings. J. Discrete Algorithms 9(1), 49–56(2011), http://dx.doi.org/10.1016/j.jda.2010.09.003
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Shift-And.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Shift-And
3 | date: 1989
4 | abbreviation: SA
5 | sidebar:
6 | order: 82
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Deterministic-Finite-Automaton]].
12 |
13 | Appeared in:
14 |
15 | - [8]: Baeza-Yates, R.A., Gonnet, G.H.: A new approach to text searching. In: Belkin, N.J., van Rijsbergen, C.J. (eds.) SIGIR’89, 12th International Conference on Research and Development in Information Retrieval, Cambridge, Massachusetts, USA, June 25-28, 1989, Proceedings. pp. 168–175. ACM (1989), http://doi.acm.org/10.1145/75334.75352
16 | - [9]: Baeza-Yates, R.A., Gonnet, G.H.: A new approach to text searching. Commun. ACM 35(10), 74–82 (1992), http://doi.acm.org/10.1145/135239.135243
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Shift-Or.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Shift-Or
3 | date: 1989
4 | abbreviation: SO
5 | sidebar:
6 | order: 81
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Deterministic-Finite-Automaton]].
12 |
13 | Appeared in:
14 |
15 | - [8]: Baeza-Yates, R.A., Gonnet, G.H.: A new approach to text searching. In: Belkin, N.J., van Rijsbergen, C.J. (eds.) SIGIR’89, 12th International Conference on Research and Development in Information Retrieval, Cambridge, Massachusetts, USA, June 25-28, 1989, Proceedings. pp. 168–175. ACM (1989), http://doi.acm.org/10.1145/75334.75352
16 | - [9]: Baeza-Yates, R.A., Gonnet, G.H.: A new approach to text searching. Commun. ACM 35(10), 74–82 (1992), http://doi.acm.org/10.1145/135239.135243
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Berry-Ravindran.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Berry-Ravindran
3 | date: 1999
4 | abbreviation: BR
5 | sidebar:
6 | order: 27
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Quick-Search]] and [[Zhu-Takaoka]]. It uses the two consecutive characters, after the current window, for computing the occurrence heuristics
12 |
13 | Appeared in:
14 |
15 | - [15]: Berry, T., Ravindran, S.: A fast string matching algorithm and experimental results. In: Holub, J., Sim´anek, M. (eds.) Proceedings of the Prague Stringology Club Workshop 1999, Prague, Czech Republic, July 8-9, 1999. pp. 16–28. Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University (1999), http://www.stringology.org/event/1999/p2.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Introduction
3 | sidebar:
4 | order: -1
5 | ---
6 |
7 | ## Algorithms based on Bit Parallelism
8 |
9 | Bit-parallelism [8,9] is a technique used for simulating nondeterministic automata. Specifically the bit-parallelism technique takes advantage of the intrinsic parallelism of the bitwise operations inside a computer word, allowing to cut down the number of operations that an algorithm performs by a factor up to $w$,
10 | where $w$ is the number of bits in the computer word. However the correspondent encoding requires one bit per pattern symbol, for a total of $m/w$ computer words. Thus, as long as a pattern fits in a computer word, bit-parallel algorithms are extremely fast, otherwise their performances degrades considerably as $m/w$
11 | grows.
12 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Two-Way Nondeterministic DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Two-Way Nondeterministic DAWG Matching
3 | date: 2003
4 | abbreviation: TNDM
5 | sidebar:
6 | order: 86
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | A two-way modification of [[Backward-Nondeterministic-DAWG-Matching]]. It scans a pattern suffix forward before normal backward scan.
12 |
13 | Appeared in:
14 |
15 | - [85]: Peltola, H., Tarhio, J.: Alternative algorithms for bit-parallel string matching. In: Nascimento, M.A., de Moura, E.S., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 10th International Symposium, SPIRE 2003, Manaus, Brazil, October 8-10, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2857, pp. 80–94. Springer (2003), http://dx.doi.org/10.1007/978-3-540-39984-1_7
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Bounded Boyer-Moore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bounded Boyer-Moore
3 | date: 2010
4 | abbreviation: BBM
5 | sidebar:
6 | order: 42
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Boyer-Moore]] using a bounded good-suffix heuristics with constant extra space.
12 |
13 | Appeared in:
14 |
15 | - [20]: Cantone, D., Cristofaro, S., Faro, S.: A space-efficient implementation of the goodsuffix heuristic. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2010, Prague, Czech Republic, August 30 - September 1, 2010. pp. 63–75. Prague Stringology Club, Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2010), http://www.stringology.org/event/2010/p06.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Bounded Fast-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bounded Fast-Search
3 | date: 2010
4 | abbreviation: BoFS
5 | sidebar:
6 | order: 43
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Fast-Search]] using a bounded good-suffix heuristics with constant extra space.
12 |
13 | Appeared in:
14 |
15 | - [20]: Cantone, D., Cristofaro, S., Faro, S.: A space-efficient implementation of the goodsuffix heuristic. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2010, Prague, Czech Republic, August 30 - September 1, 2010. pp. 63–75. Prague Stringology Club, Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2010), http://www.stringology.org/event/2010/p06.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Galil-Seiferas.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Galil-Seiferas
3 | date: 1981
4 | abbreviation: GS
5 | sidebar:
6 | order: 6
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Linear algorithm using constant extra space complexity. Preprocessing in $O(m)$-time. It performs $5n$ text character comparisons in the worst case.
12 |
13 | Appeared in:
14 |
15 | - [60]: Galil, Z., Seiferas, J.I.: Time-space-optimal string matching. In: Proceedings of the 13th Annual ACM Symposium on Theory of Computing, May 11-13, 1981, Milwaukee, Wisconsin, USA. pp. 106–113. ACM (1981), http://doi.acm.org/10.1145/800076.802463
16 | - [61]: Galil, Z., Seiferas, J.I.: Time-space-optimal string matching. J. Comput. Syst. Sci. 26(3), 280–294 (1983), http://dx.doi.org/10.1016/0022-0000(83)90002-8
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Backward-Oracle-Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Backward-Oracle-Matching
3 | date: 1999
4 | abbreviation: BOM
5 | sidebar:
6 | order: 67
7 | tags:
8 | - automata
9 | ---
10 |
11 | Variant of [[Reverse-Factor]]. It uses the Factor Oracle of the pattern. It is the first filtering algorithm using automata.
12 |
13 | Appeared in:
14 |
15 | - [3]: Allauzen, C., Crochemore, M., Raffinot, M.: Factor oracle: A new structure for pattern matching. In: Pavelka, J., Tel, G., Bartosek, M. (eds.) SOFSEM ’99, Theory and Practice of Informatics, 26th Conference on Current Trends in Theory and Practice of Informatics, Milovy, Czech Republic, November 27 - December 4, 1999, Proceedings. Lecture Notes in Computer Science, vol. 1725, pp. 295–310. Springer (1999), http://dx.doi.org/10.1007/3-540-47849-3_18
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Long patterns BNDM.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Long patterns BNDM
3 | date: 2003
4 | abbreviation: LBNDM
5 | sidebar:
6 | order: 87
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Modification of [[Backward-Nondeterministic-DAWG-Matching]] for long patterns. The automaton is constructed over a superimposed pattern constructed on the $m/w$ consecutive factors of the inout pattern
12 |
13 | Appeared in:
14 |
15 | - [85]: Peltola, H., Tarhio, J.: Alternative algorithms for bit-parallel string matching. In: Nascimento, M.A., de Moura, E.S., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 10th International Symposium, SPIRE 2003, Manaus, Brazil, October 8-10, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2857, pp. 80–94. Springer (2003), http://dx.doi.org/10.1007/978-3-540-39984-1_7
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Bounded Forward-Fast-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bounded Forward-Fast-Search
3 | date: 2010
4 | abbreviation: BFFS
5 | sidebar:
6 | order: 44
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Forward-Fast-Search]] using a bounded forward-good-suffix heuristics with constant extra space.
12 |
13 | Appeared in:
14 |
15 | - [20]: Cantone, D., Cristofaro, S., Faro, S.: A space-efficient implementation of the goodsuffix heuristic. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2010, Prague, Czech Republic, August 30 - September 1, 2010. pp. 63–75. Prague Stringology Club, Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2010), http://www.stringology.org/event/2010/p06.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Turbo-Boyer-Moore.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Turbo-Boyer-Moore
3 | date: 1992
4 | abbreviation: TBM
5 | sidebar:
6 | order: 21
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Boyer-Moore]]. It remembers characters inspected in the previous attempt. It performs at most $2n$ character inspections.
12 |
13 | Appeared in:
14 |
15 | - [53]: Finkel, A., Jantzen, M. (eds.): STACS 92, 9th Annual Symposium on Theoretical Aspects of Computer Science, Cachan, France, February 13-15, 1992, Proceedings, Lecture Notes in Computer Science, vol. 577. Springer (1992)
16 | - [33]: Crochemore, M., Czumaj, A., Gasieniec, L., Jarominek, S., Lecroq, T., Plandowski, W., Rytter, W.: Speeding up two string-matching algorithms. Algorithmica 12(4/5), 247–267 (1994), http://dx.doi.org/10.1007/BF01185427
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Two-Way Shift-Or using q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Two-Way Shift-Or using q-grams
3 | date: 2014
4 | abbreviation: TSOq
5 | sidebar:
6 | order: 117
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Shift-Or]] using several sliding windows inspected in parallel. It improves the performances by simulating a super alphabet with q-grams
12 |
13 | Appeared in:
14 |
15 | - [37]: Durian, B., Chhabra, T., Ghuman, S.S., Hirvola, T., Peltola, H., Tarhio, J.: Improved two-way bit-parallel search. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2014, Prague, Czech Republic, September 1-3, 2014. pp. 71–83. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2014), http://www.stringology.org/event/2014/p08.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Simplified BNDM.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Simplified BNDM
3 | date: 2003
4 | abbreviation: SBNDM
5 | sidebar:
6 | order: 85
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Backward-Nondeterministic-DAWG-Matching]].
12 |
13 | Appeared in:
14 |
15 | - [85]: Peltola, H., Tarhio, J.: Alternative algorithms for bit-parallel string matching. In: Nascimento, M.A., de Moura, E.S., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 10th International Symposium, SPIRE 2003, Manaus, Brazil, October 8-10, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2857, pp. 80–94. Springer (2003), http://dx.doi.org/10.1007/978-3-540-39984-1_7
16 | - [81]: Navarro, G.: Nr-grep: a fast and flexible pattern-matching tool. Softw., Pract. Exper. 31(13), 1265–1312 (2001), http://dx.doi.org/10.1002/spe.411
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Two-Way Shift-And using q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Two-Way Shift-And using q-grams
3 | date: 2014
4 | abbreviation: TSAq
5 | sidebar:
6 | order: 116
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Shift-And]] using several sliding windows inspected in parallel. It improves the performances by simulating a super alphabet with q-grams
12 |
13 | Appeared in:
14 |
15 | - [37]: Durian, B., Chhabra, T., Ghuman, S.S., Hirvola, T., Peltola, H., Tarhio, J.: Improved two-way bit-parallel search. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2014, Prague, Czech Republic, September 1-3, 2014. pp. 71–83. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2014), http://www.stringology.org/event/2014/p08.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Streaming SIMD Extensions Filter.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Streaming SIMD Extensions Filter
3 | date: 2009
4 | abbreviation: SSEF
5 | sidebar:
6 | order: 120
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | Extension of [[Skip-Search]] to packed string matching. It is implemented using SSE instructions. It works only for long patterns.
12 |
13 | Appeared in:
14 |
15 | - [76]: Külekci, M.O.: Filter based fast matching of long patterns by using SIMD instructions. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2009, Prague, Czech Republic, August 31 - September 2, 2009. pp. 118–128. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2009), http://www.stringology.org/event/2009/p11.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/BNDM with Extended Shifts.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BNDM with Extended Shifts
3 | date: 2010
4 | abbreviation: BXS
5 | sidebar:
6 | order: 104
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Modification of [[Backward-Nondeterministic-DAWG-Matching]] for long patterns. The automaton is constructed over a superimposed pattern constructed on the $m/w$ consecutive factors of the input pattern
12 |
13 | Appeared in:
14 |
15 | - [39]: Durian, B., Peltola, H., Salmela, L., Tarhio, J.: Bit-parallel search algorithms for long patterns. In: Festa, P. (ed.) Experimental Algorithms, 9th International Symposium, SEA 2010, Ischia Island, Naples, Italy, May 20-22, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6049, pp. 129–140. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13193-6_12 Exact Online String Matching Bibliography 19
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Boyer-Moore-Horspool with q-grams.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Boyer-Moore-Horspool with q-grams
3 | date: 2008
4 | abbreviation: BMHq
5 | sidebar:
6 | order: 39
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Horspool]] using a super alphabet. It computes the occurrence heuristics reading q-grams in a single operation.
12 |
13 | Appeared in:
14 |
15 | - [72]: Kalsi, P., Peltola, H., Tarhio, J.: Comparison of exact string matching algorithms for biological sequences. In: Elloumi, M., K¨ung, J., Linial, M., Murphy, R.F., Schneider, K., Toma, C. (eds.) Bioinformatics Research and Development, Second International Conference, BIRD 2008, Vienna, Austria, July 7-9, 2008, Proceedings. Communications in Computer and Information Science, vol. 13, pp. 417–426. Springer (2008), http://dx.doi.org/10.1007/978-3-540-70600-7_31
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Quantum Leap Quick-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Quantum Leap Quick-Search
3 | date: 2015
4 | abbreviation: QLQS
5 | sidebar:
6 | order: 57
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Quick-Search]]. It improves the shift performed by the occurrence heuristics by computing the shift to left performed by the reverse of the pattern at a given fixed distance from the current window.
12 |
13 | Appeared in:
14 |
15 | - [98]: Watson, B.W., Kourie, D.G., Cleophas, L.G.: Quantum leap pattern matching. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2015, Prague, Czech Republic, August 24-26, 2015. pp. 104–117. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2015), http://www.stringology.org/event/2015/p11.html
16 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Franek-Jennings-Smyth.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Franek-Jennings-Smyth
3 | date: 2007
4 | abbreviation: FJS
5 | sidebar:
6 | order: 36
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Combination of [[Knuth-Morris-Prat]] and [[Quick-Search]].
12 |
13 | Appeared in:
14 |
15 | - [54]: Franek, F., Jennings, C.G., Smyth, W.F.: A simple fast hybrid pattern-matching algorithm. In: Apostolico, A., Crochemore, M., Park, K. (eds.) Combinatorial Pattern Matching, 16th Annual Symposium, CPM 2005, Jeju Island, Korea, June 19-22, 2005, Proceedings. Lecture Notes in Computer Science, vol. 3537, pp. 288–297. Springer (2005), http://dx.doi.org/10.1007/11496656_25
16 | - [55]: Franek, F., Jennings, C.G., Smyth, W.F.: A simple fast hybrid pattern-matching algorithm. J. Discrete Algorithms 5(4), 682–695 (2007), http://dx.doi.org/10.1016/j.jda.2006.11.004
17 |
--------------------------------------------------------------------------------
/src/components/Graphviz.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { Graphviz as GraphvizWasm } from "@hpcc-js/wasm/graphviz";
3 | const graphviz = await GraphvizWasm.load();
4 |
5 | interface Props {
6 | src: string;
7 | }
8 |
9 | const { src } = Astro.props;
10 |
11 | let svg = graphviz
12 | .dot(src)
13 | .replace(``, "")
14 | .replace(
15 | ``,
17 | ""
18 | );
19 |
20 | const widthMatch = svg.match(/width="(\d+)([^"]+)"/);
21 | if (widthMatch) svg = svg.replace(widthMatch[0], "");
22 |
23 | const heightMatch = svg.match(/height="(\d+)([^"]+)"/);
24 | if (heightMatch) svg = svg.replace(heightMatch[0], "");
25 |
26 | // TODO: remove html comments
27 | ---
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Introduction
3 | sidebar:
4 | order: -1
5 | ---
6 |
7 | ## Algorithms based on Automata
8 |
9 | Also automata play a very important role in the design of efficient string matching algorithms. For instance, the [[Deterministic-Finite-Automaton|Deterministic Finite Automaton Matcher]] [31] was one of the first linear-time solutions, whereas the [[Backward-DAWG-Matching]] algorithm [35] reached the optimal $O(\frac{n \log_{σ} m}{m})$ lower bound time complexity on the average. Both of them are based on finite automata; in particular, they respectively simulate a deterministic automaton for the language $Σ^∗p$ and the deterministic suffix automaton of the reverse of $p$.
10 |
11 | The efficiency of string matching algorithms depends on the underlying automaton used for recognizing the pattern $p$ and on the encoding used for simulating it.
12 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Double Forward DAWG Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Double Forward DAWG Matching
3 | date: 2000
4 | abbreviation: DFDM
5 | sidebar:
6 | order: 68
7 | tags:
8 | - automata
9 | ---
10 |
11 | Modification of [[Forward-DAWG-Matching]]. It works in linear worst case time using a DAWG of the pattern and a DAWG of the reverse of the pattern.
12 |
13 | Appeared in:
14 |
15 | - [4]: Allauzen, C., Raffinot, M.: Simple optimal string matching algorithm. In: Giancarlo, R., Sankoff, D. (eds.) Combinatorial Pattern Matching, 11th Annual Symposium, CPM 2000, Montreal, Canada, June 21-23, 2000, Proceedings. Lecture Notes in Computer Science, vol. 1848, pp. 364–374. Springer (2000), http://dx.doi.org/10.1007/3-540-45123-4_30
16 | - [5]: Allauzen, C., Raffinot, M.: Simple optimal string matching algorithm. J. Algorithms 36(1), 102–116 (2000), http://dx.doi.org/10.1006/jagm.2000.1087
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Improved Occurrence Heuristics.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Improved Occurrence Heuristics
3 | date: 2013
4 | abbreviation: IOM
5 | sidebar:
6 | order: 53
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Horspool]]. It uses an improvement of the occurrence heuristics.
12 |
13 | Appeared in:
14 |
15 | - [23]: Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2013, Prague, Czech Republic, September 2-4, 2013. pp. 92–106. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2013), http://www.stringology.org/event/2013/p09.html
16 | - [24]: Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. J. Discrete Algorithms 28, 73–84 (2014), http://dx.doi.org/10.1016/j.jda.2014.07.006
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Forward Simplified BNDM.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward Simplified BNDM
3 | date: 2008
4 | abbreviation: FSBNDM
5 | sidebar:
6 | order: 98
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Combination of [[Simplified BNDM]] and [[Forward BNDM]].
12 |
13 | Appeared in:
14 |
15 | - [46]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2008, Prague, Czech Republic, September 1-3, 2008. pp. 146–160. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2008), http://www.stringology.org/event/2008/p14.html
16 | - [47]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. Int. J. Found. Comput. Sci. 20(6), 967–984 (2009), http://dx.doi.org/10.1142/S0129054109006991
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Exact Packed String Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Exact Packed String Matching
3 | date: 2013
4 | abbreviation: EPSM
5 | sidebar:
6 | order: 124
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | Improvement of [[Streaming SIMD Extensions Filter]]. It uses SSE instruction to speed up searching. It consists in four different algorithms depending on the length of the pattern.
12 |
13 | Appeared in:
14 |
15 | - [44]: Faro, S., Külekci, M.O.: Fast packed string matching for short patterns. In: Sanders, P., Zeh, N. (eds.) Proceedings of the 15th Meeting on Algorithm Engineering and Experiments, ALENEX 2013, New Orleans, Louisiana, USA, January 7, 2013. pp. 113–121. SIAM (2013), http://dx.doi.org/10.1137/1.9781611972931.10
16 | - [45]: Faro, S., K¨ulekci, M.O.: Fast and flexible packed string matching. J. Discrete Algorithms 28, 61–72 (2014), http://dx.doi.org/10.1016/j.jda.2014.07.003
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Packed Belazzougui.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Packed Belazzougui
3 | date: 2010
4 | abbreviation: PB
5 | sidebar:
6 | order: 121
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | Efficient packed string matching algorithm which works in $O(n/α+occ)$-time when $α ≤ m ≤ n/α$.
12 |
13 | Appeared in:
14 |
15 | - [10]: Belazzougui, D.: Worst case efficient single and multiple string matching in the RAM model. In: Iliopoulos, C.S., Smyth, W.F. (eds.) Combinatorial Algorithms - 21st International Workshop, IWOCA 2010, London, UK, July 26-28, 2010, Revised Selected Papers. Lecture Notes in Computer Science, vol. 6460, pp. 90–102. Springer (2010), http://dx.doi.org/10.1007/978-3-642-19222-7_10
16 | - [11]: Belazzougui, D.: Worst-case efficient single and multiple string matching on packed texts in the word-ram model. J. Discrete Algorithms 14, 91–106 (2012), http://dx.doi.org/10.1016/j.jda.2011.12.011
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Forward BNDM.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward BNDM
3 | date: 2008
4 | abbreviation: FBNDM
5 | sidebar:
6 | order: 97
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Forward Backward Oracle Matching]]
12 |
13 | Appeared in:
14 |
15 | - [46]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2008, Prague, Czech Republic, September 1-3, 2008. pp. 146–160. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2008), http://www.stringology.org/event/2008/p14.html
16 | - [47]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. Int. J. Found. Comput. Sci. 20(6), 967–984 (2009), http://dx.doi.org/10.1142/S0129054109006991
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Worst Occurrence Heuristics.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Worst Occurrence Heuristics
3 | date: 2013
4 | abbreviation: WOM
5 | sidebar:
6 | order: 54
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Horspool]]. It computes the occurrence heuristics on the positions which leads to the average maximal shift.
12 |
13 | Appeared in:
14 |
15 | - [23]: Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2013, Prague, Czech Republic, September 2-4, 2013. pp. 92–106. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2013), http://www.stringology.org/event/2013/p09.html
16 | - [24]: Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. J. Discrete Algorithms 28, 73–84 (2014), http://dx.doi.org/10.1016/j.jda.2014.07.006
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Extended Backward Oracle Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Extended Backward Oracle Matching
3 | date: 2008
4 | abbreviation: EBOM
5 | sidebar:
6 | order: 73
7 | tags:
8 | - automata
9 | ---
10 |
11 | Improvement of [[Backward-Oracle-Matching]]. It performs transitions of two characters at each step
12 |
13 | Appeared in:
14 |
15 | - [46]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2008, Prague, Czech Republic, September 1-3, 2008. pp. 146–160. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2008), http://www.stringology.org/event/2008/p14.html
16 | - [47]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. Int. J. Found. Comput. Sci. 20(6), 967–984 (2009), http://dx.doi.org/10.1142/S0129054109006991
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Fast-Search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fast-Search
3 | date: 2003
4 | abbreviation: FS
5 | sidebar:
6 | order: 29
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Boyer-Moore]]. It uses the occurrence heuristics when the mismatch occurs during the first comparison.
12 |
13 | Appeared in:
14 |
15 | - [21]: Cantone, D., Faro, S.: Fast-search: A new efficient variant of the boyer-moore string matching algorithm. In: Jansen, K., Margraf, M., Mastrolilli, M., Rolim, J.D.P. (eds.) Experimental and Efficient Algorithms, Second International Workshop, WEA 2003, Ascona, Switzerland, May 26-28, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2647, pp. 47–58. Springer (2003), http://dx.doi.org/10.1007/3-540-44867-5_4
16 | - [22]: Cantone, D., Faro, S.: Fast-search algorithms: New efficient variants of the boyer-moore pattern-matching algorithm. Journal of Automata, Languages and Combinatorics 10(5/6), 589–608 (2005)
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Forward SBNDM using q-grams and Lookahead.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward SBNDM using q-grams and Lookahead
3 | date: 2011
4 | abbreviation: FSBNDMqf
5 | sidebar:
6 | order: 111
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Improvement of [[Forward Simplified BNDM]] which implements a super alphabet with q-grams and computing the shift with a lookahead of several characters.
12 |
13 | Appeared in:
14 |
15 | - [86]: Peltola, H., Tarhio, J.: Variations of forward-sbndm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2011, Prague, Czech Republic, August 29-31, 2011. pp. 3–14. Prague Stringology Club, Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2011), http://www.stringology.org/event/2011/p02.html
16 | - [87]: Peltola, H., Tarhio, J.: String matching with lookahead. Discrete Applied Mathematics 163, 352–360 (2014), http://dx.doi.org/10.1016/j.dam.2013.10.034
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/Jumping Occurrence Heuristics.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Jumping Occurrence Heuristics
3 | date: 2013
4 | abbreviation: JOM
5 | sidebar:
6 | order: 55
7 | tags:
8 | - comparison-of-characters
9 | ---
10 |
11 | Improvement of [[Berry-Ravindran]]. It computes the occurrence heuristics on two non consecutive characters with a distance depending on the average maximal shift.
12 |
13 | Appeared in:
14 |
15 | - [23]: Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2013, Prague, Czech Republic, September 2-4, 2013. pp. 92–106. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2013), http://www.stringology.org/event/2013/p09.html
16 | - [24]: Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. J. Discrete Algorithms 28, 73–84 (2014), http://dx.doi.org/10.1016/j.jda.2014.07.006
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Automata/Forward Backward Oracle Matching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forward Backward Oracle Matching
3 | date: 2008
4 | abbreviation: FBOM
5 | sidebar:
6 | order: 74
7 | tags:
8 | - automata
9 | ---
10 |
11 | Combination of [[Extended Backward Oracle Matching]] and [[Quick-Search]]. It performs transitions using the characters which follows the current window of the text
12 |
13 | Appeared in:
14 |
15 | - [46]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2008, Prague, Czech Republic, September 1-3, 2008. pp. 146–160. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2008), http://www.stringology.org/event/2008/p14.html
16 | - [47]: Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. Int. J. Found. Comput. Sci. 20(6), 967–984 (2009), http://dx.doi.org/10.1142/S0129054109006991
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Comparison of Characters/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Introduction
3 | sidebar:
4 | order: -1
5 | ---
6 |
7 | ## Algorithms based on Comparison of Characters
8 |
9 | In a computational model where the matching algorithm is restricted to read all the characters of the text one by one the optimal complexity is $O(n)$, and was achieved the first time by the well known [[Morris-Pratt]] algorithm [80]. However, in many practical cases it is possible to avoid reading all the characters of the text achieving sub-linear performances on the average.
10 |
11 | The optimal average $O(\frac{n \log_{σ} m}{m})$ time complexity [99] was reached by many comparison based algorithms. However, all algorithms with a sub-linear average behavior may have to read all the text characters in the worst case. It is interesting to note that many of those algorithms have an even worse $O(nm)$-time
12 | complexity in the worst-case [48,52].
13 |
14 | In what follows we present the list of all string matching algorithms based on comparison of characters.
15 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Factorized BNDM.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Factorized BNDM
3 | date: 2010
4 | abbreviation: KBNDM
5 | sidebar:
6 | order: 110
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Backward-Nondeterministic-DAWG-Matching]] using a more compact representation of the automaton. It is based on a factorization of the pattern.
12 |
13 | Appeared in:
14 |
15 | - [26]: Cantone, D., Faro, S., Giaquinta, E.: A compact representation of nondeterministic (suffix) automata for the bit-parallel approach. In: Amir, A., Parida, L. (eds.) Combinatorial Pattern Matching, 21st Annual Symposium, CPM 2010, New York, NY, USA, June 21-23, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6129, pp. 288–298. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13509-5_26
16 | - [27]: Cantone, D., Faro, S., Giaquinta, E.: A compact representation of nondeterministic (suffix) automata for the bit-parallel approach. Inf. Comput. 213, 3–12 (2012), http://dx.doi.org/10.1016/j.ic.2011.03.006
17 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Bit Parallelism/Factorized Shift-And.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Factorized Shift-And
3 | date: 2010
4 | abbreviation: KSA
5 | sidebar:
6 | order: 109
7 | tags:
8 | - bit-parallelism
9 | ---
10 |
11 | Simulates the nondeterministic version of the automaton in [[Deterministic-Finite-Automaton]] using a more compact representation of the automaton. It is based on a factorization of the pattern.
12 |
13 | Appeared in:
14 |
15 | - [26]: Cantone, D., Faro, S., Giaquinta, E.: A compact representation of nondeterministic (suffix) automata for the bit-parallel approach. In: Amir, A., Parida, L. (eds.) Combinatorial Pattern Matching, 21st Annual Symposium, CPM 2010, New York, NY, USA, June 21-23, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6129, pp. 288–298. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13509-5_26
16 | - [27]: Cantone, D., Faro, S., Giaquinta, E.: A compact representation of nondeterministic (suffix) automata for the bit-parallel approach. Inf. Comput. 213, 3–12 (2012), http://dx.doi.org/10.1016/j.ic.2011.03.006
17 |
--------------------------------------------------------------------------------
/src/components/RecentChanges.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { bdb } from "../lib/braindb.mjs";
3 | import type { Document } from "@braindb/core";
4 |
5 | const docs = await bdb.documents({ sort: ["updated_at", "desc"] });
6 |
7 | const docsByDate = new Map();
8 | docs.forEach((doc) => {
9 | if (doc.frontmatter().tags) {
10 | const date = doc.updatedAt().toISOString().split("T")[0];
11 | docsByDate.set(date, docsByDate.get(date) || []);
12 | docsByDate.get(date)?.push(doc);
13 | }
14 | });
15 | const dates = Array.from(docsByDate.keys()).map((d) => [
16 | d,
17 | d.split("-").reverse().join("."),
18 | ]);
19 | ---
20 |
21 |
22 |
23 | {
24 | dates.map(([key, title]) => (
25 |
26 | {title}
27 |
28 | {docsByDate.get(key)?.map((doc) => (
29 | -
30 | {doc.title()}
31 |
32 | ))}
33 |
34 |
35 | ))
36 | }
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/content/docs/algorithms/Packed String Matching/Crochemore-Perrin algorithm using SSE instructions.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Crochemore-Perrin algorithm using SSE instructions
3 | date: 2011
4 | abbreviation: SSECP
5 | sidebar:
6 | order: 123
7 | tags:
8 | - packed-string-matching
9 | ---
10 |
11 | Modification of [[Two-Way]] for packed string matching. It is based on two specialized packed string instructions.
12 |
13 | Appeared in:
14 |
15 | - [13]: Ben-Kiki, O., Bille, P., Breslauer, D., Gasieniec, L., Grossi, R., Weimann, O.: Optimal packed string matching. In: Chakraborty, S., Kumar, A. (eds.) IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science, FSTTCS 2011, December 12-14, 2011, Mumbai, India. LIPIcs, Exact Online String Matching Bibliography 17 vol. 13, pp. 423–432. Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik (2011), http://dx.doi.org/10.4230/LIPIcs.FSTTCS.2011.423
16 | - [14]: Ben-Kiki, O., Bille, P., Breslauer, D., Gasieniec, L., Grossi, R., Weimann, O.: Towards optimal packed string matching. Theor. Comput. Sci. 525, 111–129 (2014), http://dx.doi.org/10.1016/j.tcs.2013.06.013
17 |
--------------------------------------------------------------------------------
/src/components/svgpanzoom.ts:
--------------------------------------------------------------------------------
1 | import "@beoe/pan-zoom/css/PanZoomUi.css";
2 | import { PanZoomUi } from "@beoe/pan-zoom";
3 |
4 | // for BEOE diagrams
5 | document.querySelectorAll(".beoe").forEach((container) => {
6 | const element = container.firstElementChild;
7 | if (!element) return;
8 | // @ts-expect-error
9 | new PanZoomUi({ element, container }).on();
10 | });
11 |
12 | // for content images
13 | document
14 | .querySelectorAll(
15 | ".sl-markdown-content > img[src$='.svg' i]," +
16 | ".sl-markdown-content > p > img[src$='.svg' i]," +
17 | // for development environment
18 | ".sl-markdown-content > img[src$='f=svg' i]," +
19 | ".sl-markdown-content > img[src$='f=svg' i]"
20 | )
21 | .forEach((element) => {
22 | if (element.parentElement?.tagName === "PICTURE") {
23 | element = element.parentElement;
24 | }
25 | const container = document.createElement("figure");
26 | container.classList.add("beoe", "not-content");
27 | element.replaceWith(container);
28 | container.append(element);
29 | // @ts-expect-error
30 | new PanZoomUi({ element, container }).on();
31 | });
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "digital-garden",
3 | "type": "module",
4 | "version": "0.0.1",
5 | "scripts": {
6 | "dev": "astro dev",
7 | "start": "astro dev",
8 | "build": "astro check && astro build",
9 | "preview": "astro preview",
10 | "astro": "astro"
11 | },
12 | "dependencies": {
13 | "@astrojs/check": "^0.7.0",
14 | "@astrojs/markdown-remark": "^5.1.1",
15 | "@astrojs/starlight": "^0.24.4",
16 | "@beoe/pan-zoom": "^0.0.3",
17 | "@braindb/core": "^0.0.13",
18 | "@braindb/remark-wiki-link": "^2.1.0",
19 | "@floating-ui/dom": "^1.6.6",
20 | "@hpcc-js/wasm": "^2.17.1",
21 | "@pagefind/default-ui": "^1.1.0",
22 | "astro": "^4.11.3",
23 | "astro-robots-txt": "^1.0.0",
24 | "github-slugger": "^2.0.0",
25 | "graphology": "^0.25.4",
26 | "graphology-layout": "^0.6.1",
27 | "graphology-layout-forceatlas2": "^0.10.1",
28 | "graphology-svg": "^0.1.3",
29 | "graphology-utils": "^2.5.2",
30 | "katex": "^0.16.10",
31 | "mkdirp": "^3.0.1",
32 | "rehype-autolink-headings": "^7.1.0",
33 | "rehype-external-links": "^3.0.0",
34 | "rehype-katex": "^7.0.0",
35 | "remark-math": "^6.0.0",
36 | "sharp": "^0.33.4",
37 | "typescript": "^5.5.2"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/components/Tags.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import type { CollectionEntry } from "astro:content";
3 | interface Props {
4 | entry: CollectionEntry<"docs">;
5 | }
6 | const { entry } = Astro.props;
7 | ---
8 |
9 |
15 |
16 |
32 |
33 |
54 |
--------------------------------------------------------------------------------
/src/components/TagList.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { getCollection } from "astro:content";
3 |
4 | const docs = await getCollection("docs");
5 | type Docs = typeof docs;
6 | const docsByTags = new Map();
7 | docs.forEach((doc) => {
8 | if (doc.data.tags) {
9 | doc.data.tags.forEach((tag: string) => {
10 | docsByTags.set(tag, docsByTags.get(tag) || []);
11 | docsByTags.get(tag)?.push(doc);
12 | });
13 | }
14 | });
15 | const comparator = new Intl.Collator("en");
16 | const tagsSorted = [...docsByTags.keys()].sort(comparator.compare);
17 | ---
18 |
19 |
25 |
26 |
27 |
28 | {
29 | tagsSorted.map((tag) => (
30 |
31 | #{tag}
32 |
33 | {docsByTags.get(tag)?.map((doc) => (
34 | -
35 | {doc.data.title}
36 |
37 | ))}
38 |
39 |
40 | ))
41 | }
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/components/Alphabetical.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { getCollection } from "astro:content";
3 |
4 | const firstChar = (str: string) => String.fromCodePoint(str.codePointAt(0)!);
5 |
6 | const docs = await getCollection("docs");
7 | type Docs = typeof docs;
8 | const docsByChar = new Map();
9 | docs.forEach((doc) => {
10 | if (doc.data.tags) {
11 | const char = firstChar(doc.data.title).toUpperCase();
12 | docsByChar.set(char, docsByChar.get(char) || []);
13 | docsByChar.get(char)?.push(doc);
14 | }
15 | });
16 | const comparator = new Intl.Collator("en");
17 | const charsSorted = [...docsByChar.keys()].sort(comparator.compare);
18 | ---
19 |
20 |
26 |
27 |
28 |
29 | {
30 | charsSorted.map((char) => (
31 |
32 | {char}
33 |
34 | {docsByChar.get(char)?.map((doc) => (
35 | -
36 | {doc.data.title}
37 |
38 | ))}
39 |
40 |
41 | ))
42 | }
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/components/Backlinks.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { bdb } from "../lib/braindb.mjs";
3 | import type { CollectionEntry } from "astro:content";
4 | interface Props {
5 | entry: CollectionEntry<"docs">;
6 | }
7 | const { entry } = Astro.props;
8 |
9 | const doc = await bdb.findDocument(`/${entry.id}`);
10 | ---
11 |
12 |
18 |
19 |
20 | {
21 | doc && doc.documentsFrom().length > 0 && (
22 | <>
23 |
Backlinks
24 |
25 | {doc.documentsFrom().map((x) => (
26 | -
27 | {x.title()}
28 |
29 | ))}
30 |
31 | >
32 | )
33 | }
34 |
35 |
36 |
57 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Exact Online String Matching
2 |
3 | [](https://app.netlify.com/sites/exact-online-string-matching/deploys)
4 |
5 | [Demo of timeline diagram (aka chronology, aka genealogical tree)](https://exact.stereobooster.com). All content taken from [Exact Online String Matching Bibliography](https://arxiv.org/pdf/1605.05067.pdf) (all credits goes to the original author).
6 |
7 | ## TODO
8 |
9 | - expose page with diagram alone to allow embeding with iframe
10 | - expose daigram as SVG file to allow downloading
11 | - show metadata in sidebar
12 | - client-side content-graph. I can render it on the server side, but I don't like it
13 | - use the same colors as in timeline visualisation
14 | - add data from other papers
15 | - [Exact String Matching Algorithms: Survey, Issues, and Future Research Directions](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8703383)
16 | - [Technology Beats Algorithms (in Exact String Matching)](https://arxiv.org/pdf/1612.01506.pdf)
17 | - [Exact string matching algorithms](https://www-igm.univ-mlv.fr/~lecroq/string/)
18 | - [The String Matching Algorithms Research Tool](https://www.dmi.unict.it/faro/papers/conference/faro47.pdf)
19 | - [The Exact Online String Matching Problem: a Review of the Most Recent Results](https://www-igm.univ-mlv.fr/~lecroq/articles/acmsurv2013.pdf)
20 | - [A guided tour to approximate string matching](https://users.dcc.uchile.cl/~gnavarro/ps/acmcs01.1.pdf)
21 | - [Offline Approximate String Matching for Information Retrieval: An experiment on technical documentation](https://hj.diva-portal.org/smash/get/diva2:663931/FULLTEXT01.pdf)
22 |
--------------------------------------------------------------------------------
/src/components/Graph.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { renderer, DEFAULTS } from "./graphRenderer";
3 |
4 | export interface Props {
5 | graph: any;
6 | }
7 |
8 | const { graph } = Astro.props;
9 |
10 | // probably need to use cache here
11 | const result = renderer(graph, {
12 | ...DEFAULTS,
13 | width: 800,
14 | height: 800,
15 | });
16 | ---
17 |
18 |
24 |
25 |
26 |
27 |
28 |
29 |
62 |
--------------------------------------------------------------------------------
/src/components/timeline.ts:
--------------------------------------------------------------------------------
1 | export type TimelineItem = {
2 | id: string;
3 | year: number;
4 | tooltip?: string;
5 | class?: string;
6 | label?: string;
7 | url?: string;
8 | in?: string[];
9 | out?: string[];
10 | };
11 |
12 | export type DotTimelineProps = {
13 | items: TimelineItem[];
14 | /**
15 | * https://www.graphviz.org/doc/info/attrs.html#d:rankdir
16 | */
17 | direction?: "TB" | "BT" | "LR" | "RL";
18 | };
19 |
20 | export function dotTimeline({ items, direction }: DotTimelineProps) {
21 | const byYears: Record = {};
22 |
23 | items.forEach((item) => {
24 | byYears[item.year] = byYears[item.year] || [];
25 | byYears[item.year].push(item.id);
26 | });
27 |
28 | return `digraph timeline {
29 | ${direction ? `rankdir=${direction}` : ""}
30 | bgcolor="transparent";
31 | size="7,8";
32 |
33 | edge [style=invis];
34 | node [fontsize=24, shape = plaintext];
35 |
36 | ${Object.keys(byYears).sort().join(` -> `)}
37 | 0[label=" "]
38 |
39 | node [fontsize=20, shape = box];
40 |
41 | ${Object.keys(byYears)
42 | .sort()
43 | .map(
44 | (year) =>
45 | `{ rank=same; "${year}" ${byYears[year]
46 | .map((x) => `"${x}"`)
47 | .join(" ")}; }`
48 | )
49 | .join("\n")}
50 |
51 | edge[style=solid];
52 |
53 | ${items
54 | .map(
55 | (item) =>
56 | `"${item.id}"[${item.url ? `URL="${item.url}"` : ""} ${
57 | item.label ? `label="${item.label}"` : ""
58 | } ${item.class ? `class="${item.class}"` : ""} ${
59 | item.tooltip ? `tooltip="${item.tooltip}"` : ""
60 | }];`
61 | )
62 | .join("\n")}
63 |
64 | ${items
65 | .map((item) =>
66 | !item.in
67 | ? ""
68 | : item.in.map((id) => `"${id}" -> "${item.id}";`).join("\n")
69 | )
70 | .join("\n")}
71 |
72 | ${items
73 | .map((item) =>
74 | !item.out
75 | ? ""
76 | : item.out.map((id) => `"${item.id}" -> "${id}";`).join("\n")
77 | )
78 | .join("\n")}
79 | }`;
80 | }
81 |
--------------------------------------------------------------------------------
/src/content/docs/index.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Chronology of Exact Online String Matching Algorithms
3 | prev: false
4 | next: false
5 | tableOfContents: false
6 | template: splash
7 | ---
8 |
9 | Since 1970 more than **120** string matching algorithms have been proposed. In this diagram shown almost all of them. The list is updated to **May 2016**. From [Exact Online String Matching Bibliography](https://arxiv.org/pdf/1605.05067.pdf)
10 |
11 | **Try: zoom, drag diagram below 👇 or hover, click nodes.**
12 |
13 | import Publications from "../../components/Publications.astro";
14 |
15 |
16 |
17 | ## About demo
18 |
19 | This demo is to show the potential of modern Jamstack and alternative ideas for publishing Second Brain / Digital Garden.
20 |
21 | ### Markdown as "graph" database
22 |
23 | - Data for timeline directly queried from markdown files. No need to maintain a separate file.
24 | - Connection between nodes automatically discovered based on links (markdown links or wiki links).
25 |
26 | ### No JS diagram
27 |
28 | - Diagram fully generated on the server (at build time in case of Jamstack). So it works even without JS - no need for Mermaid or d3 on the client
29 | - Diagram is embedded SVG, which allows
30 | - to add HTML links to it
31 | - style it with CSS classes, for example, to add dark theme support
32 |
33 | ### Progressively enhanced diagram
34 |
35 | On top of static SVG, there is a small JS added to:
36 |
37 | - to allow drag/zoom diagram
38 | - to show HTML reach snippets when the user hovers over a node
39 | - snippet is HTML page generated based on markdown from the file
40 |
41 | ## Technology
42 |
43 | - [Astro + Braindb](https://astro-digital-garden.stereobooster.com/recipes/braindb/)
44 | - [Graphviz compiled to WASM](https://www.npmjs.com/package/@hpcc-js/wasm)
45 |
46 | ## Related
47 |
48 | - [Digital garden about fuzzy string matching](https://fuzzy.stereobooster.com/)
49 | - [Chronology of parsers](https://parsing.stereobooster.com/other/chronology-of-parsers/)
50 | - [History of programming languages](https://rigaux.org/language-study/diagram.html). This is where I took the original idea of Graphviz visualization
51 |
--------------------------------------------------------------------------------
/src/lib/graph.ts:
--------------------------------------------------------------------------------
1 | import { BrainDB } from "@braindb/core";
2 | import { bdb } from "./braindb.mjs";
3 | import graphology from "graphology";
4 | import circular from "graphology-layout/circular";
5 | import forceAtlas2 from "graphology-layout-forceatlas2";
6 | // @ts-ignore
7 | const { MultiGraph } = graphology;
8 |
9 | const prefix = "/algorithms";
10 |
11 | export async function toGraphologyJson(db: BrainDB) {
12 | const nodes = (await db.documents())
13 | .map((document) => ({
14 | key: document.id(),
15 | attributes: {
16 | label: document.frontmatter().title as string,
17 | url: document.url(),
18 | // size: 0.05,
19 | // color: "#f00"
20 | },
21 | }))
22 | .filter((x) => x.attributes.url.startsWith(prefix));
23 |
24 | const edges = (await db.links())
25 | .filter((link) => link.to() !== null && link.to()?.url().startsWith(prefix))
26 | .map((link) => ({
27 | source: link.from().id(),
28 | target: link.to()?.id(),
29 | }));
30 |
31 | // const tagsAll = (await db.documents())
32 | // .map((document) => {
33 | // const tags = document.frontmatter().tags;
34 | // return Array.isArray(tags) ? tags : [];
35 | // })
36 | // .flat();
37 |
38 | // const tagNodes = [...new Set(tagsAll)].map((tag) => ({
39 | // key: tag,
40 | // attributes: {
41 | // label: tag,
42 | // url: "",
43 | // size: 0.4,
44 | // },
45 | // }));
46 |
47 | // const tagEdges = (await db.documents())
48 | // .map((document) => {
49 | // const tags = document.frontmatter().tags;
50 | // if (!Array.isArray(tags)) return [];
51 | // return tags.map((tag) => ({
52 | // source: tag,
53 | // target: document.id(),
54 | // }));
55 | // })
56 | // .flat();
57 |
58 | return {
59 | attributes: { name: "g" },
60 | options: {
61 | allowSelfLoops: true,
62 | multi: true,
63 | type: "directed",
64 | },
65 | nodes, //: [...nodes, ...tagNodes],
66 | edges, //: [...edges, ...tagEdges],
67 | };
68 | }
69 |
70 | export async function getGraph() {
71 | const graph = new MultiGraph();
72 | const data = await toGraphologyJson(bdb);
73 | graph.import(data as any);
74 | circular.assign(graph);
75 | forceAtlas2.assign(graph, 2000);
76 | return graph;
77 | }
78 |
--------------------------------------------------------------------------------
/src/styles/custom.css:
--------------------------------------------------------------------------------
1 | @import url(katex/dist/katex.min.css);
2 |
3 | .no-select {
4 | user-select: none;
5 | }
6 |
7 | /* text in mermaid diagram partially hidden otherwise */
8 | svg .node .label {
9 | line-height: 1.2;
10 | }
11 |
12 | .flowchart-link {
13 | stroke: var(--sl-color-white) !important;
14 | }
15 |
16 | .marker {
17 | stroke: var(--sl-color-white) !important;
18 | fill: var(--sl-color-white) !important;
19 | }
20 |
21 | /* links in headers */
22 | .sl-markdown-content :is(h1, h2, h3, h4, h5, h6) {
23 | a {
24 | text-decoration: none;
25 | font-size: 1.3rem;
26 | margin-left: 0.5rem;
27 | /* emoji silhouette */
28 | color: transparent !important;
29 | }
30 |
31 | &:hover a {
32 | /* emoji silhouette */
33 | text-shadow: 0 0 0 var(--sl-color-text-accent);
34 | }
35 |
36 | .icon.icon-link::after {
37 | /* content: "#"; */
38 | /* content: "⚓"; */
39 | content: "🔗";
40 | }
41 | }
42 |
43 | .graphology {
44 | text {
45 | fill: var(--sl-color-white) !important;
46 | }
47 |
48 | line {
49 | stroke-width: 2px;
50 | }
51 | }
52 |
53 | .broken-link {
54 | text-decoration: underline;
55 | color: red;
56 | }
57 |
58 | .column-list {
59 | column-width: calc(var(--sl-content-width) / 2 - 1.5rem);
60 |
61 | ul {
62 | padding: 0;
63 | list-style: none;
64 | margin-top: 0 !important;
65 | }
66 | }
67 |
68 | @media (min-width: 72rem) {
69 | .sl-container {
70 | margin-inline: var(--sl-content-margin-inline, 0) !important;
71 | }
72 | }
73 |
74 | svg.icon.text {
75 | display: inline-block !important;
76 | margin: 0 0 -0.25rem 0 !important;
77 | }
78 |
79 | .timeline {
80 | .automata {
81 | polygon {
82 | fill: lightblue;
83 | stroke: lightblue;
84 | }
85 | text {
86 | fill: black;
87 | }
88 | }
89 | .comparison-of-characters {
90 | polygon {
91 | fill: lightpink;
92 | stroke: lightpink;
93 | }
94 | text {
95 | fill: black;
96 | }
97 | }
98 | .bit-parallelism {
99 | polygon {
100 | fill: lavender;
101 | stroke: lavender;
102 | }
103 | text {
104 | fill: black;
105 | }
106 | }
107 | .packed-string-matching {
108 | polygon {
109 | fill: #c0ff3e;
110 | stroke: #c0ff3e;
111 | }
112 | text {
113 | fill: black;
114 | }
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/src/lib/braindb.mjs:
--------------------------------------------------------------------------------
1 | import { slug as githubSlug } from "github-slugger";
2 | import path from "node:path";
3 | import process from "node:process";
4 | import { BrainDB } from "@braindb/core";
5 |
6 | // import { dirname } from "node:path";
7 | // import { mkdirp } from "mkdirp";
8 | // import { writeFileSync, readFileSync } from "node:fs";
9 | // const references = readFileSync(path.resolve(process.cwd(), "references.txt")).toString().split("\n");
10 |
11 | // slug implementation according to Astro
12 | // see astro/packages/astro/src/content/utils.ts
13 | const generateSlug = (filePath) => {
14 | const withoutFileExt = filePath.replace(
15 | new RegExp(path.extname(filePath) + "$"),
16 | ""
17 | );
18 | const rawSlugSegments = withoutFileExt.split(path.sep);
19 | const slug = rawSlugSegments
20 | // Slugify each route segment to handle capitalization and spaces.
21 | // Note: using `slug` instead of `new Slugger()` means no slug deduping.
22 | .map((segment) => githubSlug(segment))
23 | .join("/")
24 | .replace(/\/index$/, "");
25 |
26 | return slug;
27 | };
28 |
29 | const start = new Date().getTime();
30 |
31 | export const bdb = new BrainDB({
32 | root: path.resolve(process.cwd(), "src/content/docs"),
33 | url: (filePath, _frontmatter) => `${generateSlug(filePath)}/`,
34 | git: process.cwd(),
35 | storeMarkdown: false,
36 | // need to configure caching in Netlify in order to use this
37 | // - https://github.com/siakaramalegos/netlify-plugin-cache-folder
38 | // - https://github.com/netlify/build/tree/main/packages/cache-utils
39 | // dbPath: process.cwd(),
40 | });
41 |
42 | bdb.start();
43 |
44 | // let first = false;
45 | bdb.on("*", (action, opts) => {
46 | // if (first && action === "create" && opts.document.frontmatter().tags) {
47 | // let md = opts.document.markdown();
48 | // const docRegexp = /\((\d+)\)/g;
49 |
50 | // [...md.matchAll(docRegexp)].forEach((x) => {
51 | // const id = parseInt(x[1]);
52 | // const docs = bdb.documentsSync({
53 | // frontmatter: { sidebar: { order: id } },
54 | // });
55 | // const doc = docs[0];
56 | // if (doc) {
57 | // md = md.replaceAll(x[0], `[[${doc.slug()}]]`);
58 | // } else {
59 | // console.log(`Failed to find ${x[0]}`);
60 | // }
61 | // });
62 |
63 | // const refRegexp = /Appeared in \\\[([\d\,]+)\]/g;
64 |
65 | // [...md.matchAll(refRegexp)].forEach((x) => {
66 | // console.log()
67 | // md = md.replace(x[0], "").replaceAll("\n\n", "\n")
68 | // md = md + "\nAppeared in:\n\n"
69 | // x[1].split(",").forEach(ref => {
70 | // md = md + `- \[${ref}]: ${references[parseInt(ref) - 1]}\n`
71 | // })
72 | // })
73 |
74 | // const mdPath = process.cwd() + `/tmp` + opts.document.path();
75 | // mkdirp.sync(dirname(mdPath));
76 | // writeFileSync(mdPath, md, {
77 | // encoding: "utf8",
78 | // });
79 | // // first = false;
80 | // }
81 |
82 | if (action === "ready")
83 | console.log(`BrainDB ready: ${new Date().getTime() - start}ms`);
84 |
85 | if (opts) {
86 | opts.document
87 | .unresolvedLinks()
88 | .forEach((link) =>
89 | console.log(
90 | `Unresolved link: ${link
91 | .from()
92 | .path()}:${link.line()}:${link.column()}`
93 | )
94 | );
95 | }
96 | });
97 |
--------------------------------------------------------------------------------
/astro.config.mjs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "astro/config";
2 | import starlight from "@astrojs/starlight";
3 | import rehypeExternalLinks from "rehype-external-links";
4 | import remarkMath from "remark-math";
5 | import rehypeKatex from "rehype-katex";
6 | import { rehypeHeadingIds } from "@astrojs/markdown-remark";
7 | import rehypeAutolinkHeadings from "rehype-autolink-headings";
8 | import robotsTxt from "astro-robots-txt";
9 |
10 | import remarkWikiLink from "@braindb/remark-wiki-link";
11 | import { bdb } from "./src/lib/braindb.mjs";
12 |
13 | await bdb.ready();
14 |
15 | // https://astro.build/config
16 | export default defineConfig({
17 | site: "https://exact.stereobooster.com",
18 | integrations: [
19 | starlight({
20 | title: "Exact Online String Matching",
21 | social: {
22 | github: "https://github.com/stereobooster/exact-online-string-matching",
23 | },
24 | editLink: {
25 | baseUrl:
26 | "https://github.com/stereobooster/exact-online-string-matching/edit/main/",
27 | },
28 | sidebar: [
29 | {
30 | label: "Algorithms",
31 | collapsed: true,
32 | autogenerate: {
33 | directory: "algorithms",
34 | },
35 | },
36 | ],
37 | customCss: ["./src/styles/custom.css"],
38 | components: {
39 | PageFrame: "./src/components/PageFrame.astro",
40 | TableOfContents: "./src/components/TableOfContents.astro",
41 | // Hero: "./src/components/Hero.astro",
42 | },
43 | lastUpdated: true,
44 | }),
45 | robotsTxt(),
46 | ],
47 | markdown: {
48 | remarkPlugins: [
49 | remarkMath,
50 | [
51 | remarkWikiLink,
52 | {
53 | linkTemplate: ({ slug, alias }) => {
54 | const [slugWithoutAnchor, anchor] = slug.split("#");
55 | const doc = bdb.documentsSync({ slug: slugWithoutAnchor })[0];
56 | if (doc) {
57 | return {
58 | hName: "a",
59 | hProperties: {
60 | href: anchor ? `${doc.url()}#${anchor}` : doc.url(),
61 | },
62 | hChildren: [
63 | {
64 | type: "text",
65 | value: alias == null ? doc.frontmatter().title : alias,
66 | },
67 | ],
68 | };
69 | } else {
70 | return {
71 | hName: "span",
72 | hProperties: {
73 | class: "broken-link",
74 | title: `Can't resolve link to ${slug}`,
75 | },
76 | hChildren: [{ type: "text", value: alias || slug }],
77 | };
78 | }
79 | },
80 | },
81 | ],
82 | ],
83 | rehypePlugins: [
84 | rehypeHeadingIds,
85 | [rehypeAutolinkHeadings, { behavior: "append" }],
86 | [
87 | rehypeExternalLinks,
88 | {
89 | content: { type: "text", value: " ↗" }, // ⤴
90 | contentProperties: { "aria-hidden": true, class: "no-select" },
91 | },
92 | ],
93 | rehypeKatex,
94 | ],
95 | },
96 | vite: {
97 | ssr: {
98 | noExternal: ["katex"],
99 | },
100 | optimizeDeps: {
101 | exclude: ["fsevents", "@node-rs", "@napi-rs"],
102 | },
103 | },
104 | });
105 |
--------------------------------------------------------------------------------
/src/components/preview.ts:
--------------------------------------------------------------------------------
1 | import { computePosition, autoPlacement, offset } from "@floating-ui/dom";
2 |
3 | const tooltip = document.querySelector("#linkpreview") as HTMLElement;
4 |
5 | const elements = document.querySelectorAll(
6 | ".sl-markdown-content a, .timeline a"
7 | ) as NodeListOf;
8 |
9 | // response may arrive after cursor left the link
10 | let currentHref: string;
11 | // it is anoying that preview shows up before user ends mouse movement
12 | // if cursor stays long enough above the link - consider it as intentional
13 | let showPreviewTimer: NodeJS.Timeout | undefined;
14 | // if cursor moves out for a short period of time and comes back we should not hide preview
15 | // if cursor moves out from link to preview window we should we should not hide preview
16 | let hidePreviewTimer: NodeJS.Timeout | undefined;
17 |
18 | function hideLinkPreview() {
19 | clearTimeout(showPreviewTimer);
20 | if (hidePreviewTimer !== undefined) return;
21 | hidePreviewTimer = setTimeout(() => {
22 | currentHref = "";
23 | tooltip.style.display = "";
24 | hidePreviewTimer = undefined;
25 | }, 200);
26 | }
27 |
28 | function clearTimers() {
29 | clearTimeout(showPreviewTimer);
30 | clearTimeout(hidePreviewTimer);
31 | hidePreviewTimer = undefined;
32 | }
33 |
34 | async function showLinkPreview(e: MouseEvent | FocusEvent) {
35 | const start = `${window.location.protocol}//${window.location.host}`;
36 | const target = e.target as HTMLElement;
37 | const hrefRaw = (target?.closest("a")?.href || "") as
38 | | string
39 | | SVGAnimatedString;
40 |
41 | let href = "";
42 | let local = false;
43 | let hash = "";
44 | let svg = false;
45 | if (typeof hrefRaw === "string") {
46 | href = hrefRaw;
47 | hash = new URL(href).hash;
48 | local = href.startsWith(start);
49 | } else {
50 | // disabled for now
51 | href = hrefRaw.baseVal;
52 | hash = new URL(href, window.location.origin).hash;
53 | local = href.startsWith("/");
54 | svg = true;
55 | }
56 |
57 | const hrefWithoutAnchor = href.replace(hash, "");
58 | const locationWithoutAnchor = window.location.href.replace(
59 | window.location.hash,
60 | ""
61 | );
62 |
63 | currentHref = href;
64 | if (hrefWithoutAnchor === locationWithoutAnchor || !local) {
65 | hideLinkPreview();
66 | return;
67 | }
68 | clearTimers();
69 |
70 | const text = await fetch(href).then((x) => x.text());
71 | if (currentHref !== href) return;
72 |
73 | showPreviewTimer = setTimeout(() => {
74 | if (currentHref !== href) return;
75 | const doc = new DOMParser().parseFromString(text, "text/html");
76 | const content = (doc.querySelector(".sl-markdown-content") as HTMLElement)
77 | ?.outerHTML;
78 | tooltip.innerHTML = svg
79 | ? `${doc.querySelector("h1")?.outerHTML}${content}`
80 | : content;
81 | tooltip.style.display = "block";
82 | let offsetTop = 0;
83 | if (hash !== "") {
84 | const heading = tooltip.querySelector(hash) as HTMLElement | null;
85 | if (heading) offsetTop = heading.offsetTop;
86 | }
87 | tooltip.scroll({ top: offsetTop, behavior: "instant" });
88 |
89 | computePosition(target, tooltip, {
90 | middleware: [offset(10), autoPlacement()],
91 | }).then(({ x, y }) => {
92 | Object.assign(tooltip.style, {
93 | left: `${x}px`,
94 | top: `${y}px`,
95 | });
96 | });
97 | }, 400);
98 | }
99 |
100 | tooltip.addEventListener("mouseenter", clearTimers);
101 | tooltip.addEventListener("mouseleave", hideLinkPreview);
102 |
103 | const events = [
104 | ["mouseenter", showLinkPreview],
105 | ["mouseleave", hideLinkPreview],
106 | ["focus", showLinkPreview],
107 | ["blur", hideLinkPreview],
108 | ] as const;
109 |
110 | Array.from(elements).forEach((element) => {
111 | events.forEach(([event, listener]) => {
112 | element.addEventListener(event, listener);
113 | });
114 | });
115 |
--------------------------------------------------------------------------------
/src/components/graphRenderer.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 | /**
3 | * Graphology SVG Renderer
4 | *
5 | * Copy-paste from original package to fix some things in place
6 | */
7 | import helpers from "graphology-svg/helpers";
8 | import defaults from "graphology-svg/defaults";
9 | // import line from "graphology-svg/components/edges/line";
10 | // import circle from "graphology-svg/components/nodes/circle";
11 | // import nodeLabelDefault from "graphology-svg/components/nodeLabels/default";
12 |
13 | export const { DEFAULTS } = defaults;
14 |
15 | function nodeReducer(settings: any, node: any, attr: any) {
16 | return {
17 | ...defaults.DEFAULT_NODE_REDUCER(settings, node, attr),
18 | url: attr.url,
19 | id: node,
20 | };
21 | }
22 |
23 | function drawCircle(_settings, data) {
24 | const circle = ``;
25 | if (!data.url) return circle;
26 | return `${circle}`;
29 | }
30 |
31 | function drawLabel(settings, data) {
32 | const label = `${helpers.escape(data.label)}`;
37 | if (!data.url) return "";
38 | return `${label}`;
41 | }
42 |
43 | const marker = `
44 |
45 |
46 |
47 | `;
48 |
49 | function drawEdge(_settings, data, sourceData, targetData) {
50 | // return ``;
56 |
57 | const radius = 14;
58 | const length = Math.sqrt(
59 | Math.pow(sourceData.y - targetData.y, 2) +
60 | Math.pow(sourceData.x - targetData.x, 2)
61 | );
62 | const coefficientX = (sourceData.x - targetData.x) / length;
63 | const coefficientY = (sourceData.y - targetData.y) / length;
64 | const arrowX = targetData.x + coefficientX * radius;
65 | const arrowY = targetData.y + coefficientY * radius;
66 |
67 | return ``;
70 | }
71 |
72 | const components = {
73 | nodes: {
74 | circle: drawCircle,
75 | },
76 | edges: {
77 | line: drawEdge,
78 | },
79 | nodeLabels: {
80 | default: drawLabel,
81 | },
82 | };
83 |
84 | export function renderer(graph: any, settings: any) {
85 | // Reducing nodes
86 | const nodeData = reduceNodes(graph, settings);
87 |
88 | // Drawing edges
89 | const edgesStrings = [];
90 | graph.forEachEdge(function (edge, attr, source, target) {
91 | // Reducing edge
92 | if (typeof settings.edges.reducer === "function")
93 | attr = settings.edges.reducer(settings, edge, attr);
94 |
95 | attr = defaults.DEFAULT_EDGE_REDUCER(settings, edge, attr);
96 |
97 | edgesStrings.push(
98 | components.edges[attr.type](
99 | settings,
100 | attr,
101 | nodeData[source],
102 | nodeData[target]
103 | )
104 | );
105 | });
106 |
107 | // Drawing nodes and labels
108 | // TODO: should we draw in size order to avoid weird overlaps? Should we run noverlap?
109 | const nodesStrings = [];
110 | const nodeLabelsStrings = [];
111 | let k;
112 | for (k in nodeData) {
113 | nodesStrings.push(
114 | components.nodes[nodeData[k].type](settings, nodeData[k])
115 | );
116 | nodeLabelsStrings.push(
117 | components.nodeLabels[nodeData[k].labelType](settings, nodeData[k])
118 | );
119 | }
120 |
121 | return ``;
129 | }
130 |
131 | function reduceNodes(graph, settings) {
132 | const width = settings.width,
133 | height = settings.height;
134 |
135 | let xBarycenter = 0,
136 | yBarycenter = 0,
137 | totalWeight = 0;
138 |
139 | const data = {};
140 |
141 | graph.forEachNode(function (node, attr) {
142 | // Applying user's reducing logic
143 | if (typeof settings.nodes.reducer === "function")
144 | attr = settings.nodes.reducer(settings, node, attr);
145 |
146 | attr = nodeReducer(settings, node, attr);
147 | data[node] = attr;
148 |
149 | // Computing rescaling items
150 | xBarycenter += attr.size * attr.x;
151 | yBarycenter += attr.size * attr.y;
152 | totalWeight += attr.size;
153 | });
154 |
155 | xBarycenter /= totalWeight;
156 | yBarycenter /= totalWeight;
157 |
158 | let d, ratio, n;
159 | let dMax = -Infinity;
160 |
161 | let k;
162 |
163 | for (k in data) {
164 | n = data[k];
165 | d = Math.pow(n.x - xBarycenter, 2) + Math.pow(n.y - yBarycenter, 2);
166 |
167 | if (d > dMax) dMax = d;
168 | }
169 |
170 | ratio =
171 | (Math.min(width, height) - 2 * settings.margin) / (2 * Math.sqrt(dMax));
172 |
173 | for (k in data) {
174 | n = data[k];
175 |
176 | n.x = width / 2 + (n.x - xBarycenter) * ratio;
177 | n.y = height / 2 + (n.y - yBarycenter) * ratio;
178 |
179 | n.size *= ratio; // TODO: keep?
180 | }
181 |
182 | return data;
183 | }
184 |
--------------------------------------------------------------------------------
/references.txt:
--------------------------------------------------------------------------------
1 | Ahmed, M., Kaykobad, M., Chowdhury, R.A.: A new string matching algorithm. Int. J. Comput. Math. 80(7), 825–834 (2003), http://dx.doi.org/10.1080/0020716031000087113
2 | Al-Ssulami, A.M.: Hybrid string matching algorithm with a pivot. J. Information Science 41(1), 82–88 (2015), http://dx.doi.org/10.1177/0165551514555668
3 | Allauzen, C., Crochemore, M., Raffinot, M.: Factor oracle: A new structure for pattern matching. In: Pavelka, J., Tel, G., Bartosek, M. (eds.) SOFSEM ’99, Theory and Practice of Informatics, 26th Conference on Current Trends in Theory and Practice of Informatics, Milovy, Czech Republic, November 27 - December 4, 1999, Proceedings. Lecture Notes in Computer Science, vol. 1725, pp. 295–310. Springer (1999), http://dx.doi.org/10.1007/3-540-47849-3_18
4 | Allauzen, C., Raffinot, M.: Simple optimal string matching algorithm. In: Giancarlo, R., Sankoff, D. (eds.) Combinatorial Pattern Matching, 11th Annual Symposium, CPM 2000, Montreal, Canada, June 21-23, 2000, Proceedings. Lecture Notes in Computer Science, vol. 1848, pp. 364–374. Springer (2000), http://dx.doi.org/10.1007/3-540-45123-4_30
5 | Allauzen, C., Raffinot, M.: Simple optimal string matching algorithm. J. Algorithms 36(1), 102–116 (2000), http://dx.doi.org/10.1006/jagm.2000.1087
6 | Apostolico, A., Crochemore, M.: Optimal canonization of all substrings of a string. Inf. Comput. 95(1), 76–95 (1991), http://dx.doi.org/10.1016/0890-5401(91)90016-U
7 | Apostolico, A., Giancarlo, R.: The boyer-moore-galil string searching strategies revisited. SIAM J. Comput. 15(1), 98–105 (1986), http://dx.doi.org/10.1137/0215007
8 | Baeza-Yates, R.A., Gonnet, G.H.: A new approach to text searching. In: Belkin, N.J., van Rijsbergen, C.J. (eds.) SIGIR’89, 12th International Conference on Research and Development in Information Retrieval, Cambridge, Massachusetts, USA, June 25-28, 1989, Proceedings. pp. 168–175. ACM (1989), http://doi.acm.org/10.1145/75334.75352
9 | Baeza-Yates, R.A., Gonnet, G.H.: A new approach to text searching. Commun. ACM 35(10), 74–82 (1992), http://doi.acm.org/10.1145/135239.135243
10 | Belazzougui, D.: Worst case efficient single and multiple string matching in the RAM model. In: Iliopoulos, C.S., Smyth, W.F. (eds.) Combinatorial Algorithms - 21st International Workshop, IWOCA 2010, London, UK, July 26-28, 2010, Revised Selected Papers. Lecture Notes in Computer Science, vol. 6460, pp. 90–102. Springer (2010), http://dx.doi.org/10.1007/978-3-642-19222-7_10
11 | Belazzougui, D.: Worst-case efficient single and multiple string matching on packed texts in the word-ram model. J. Discrete Algorithms 14, 91–106 (2012), http://dx.doi.org/10.1016/j.jda.2011.12.011
12 | Belazzougui, D., Raffinot, M.: Average optimal string matching in packed strings. In: Spirakis, P.G., Serna, M.J. (eds.) Algorithms and Complexity, 8th International Conference, CIAC 2013, Barcelona, Spain, May 22-24, 2013. Proceedings. Lecture Notes in Computer Science, vol. 7878, pp. 37–48. Springer (2013), http://dx.doi.org/10.1007/978-3-642-38233-8_4
13 | Ben-Kiki, O., Bille, P., Breslauer, D., Gasieniec, L., Grossi, R., Weimann, O.: Optimal packed string matching. In: Chakraborty, S., Kumar, A. (eds.) IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science, FSTTCS 2011, December 12-14, 2011, Mumbai, India. LIPIcs, Exact Online String Matching Bibliography 17 vol. 13, pp. 423–432. Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik (2011), http://dx.doi.org/10.4230/LIPIcs.FSTTCS.2011.423
14 | Ben-Kiki, O., Bille, P., Breslauer, D., Gasieniec, L., Grossi, R., Weimann, O.: Towards optimal packed string matching. Theor. Comput. Sci. 525, 111–129 (2014), http://dx.doi.org/10.1016/j.tcs.2013.06.013
15 | Berry, T., Ravindran, S.: A fast string matching algorithm and experimental results. In: Holub, J., Sim´anek, M. (eds.) Proceedings of the Prague Stringology Club Workshop 1999, Prague, Czech Republic, July 8-9, 1999. pp. 16–28. Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University (1999), http://www.stringology.org/event/1999/p2.html
16 | Bille, P.: Fast searching in packed strings. In: Kucherov, G., Ukkonen, E. (eds.) Combinatorial Pattern Matching, 20th Annual Symposium, CPM 2009, Lille, France, June 22-24, 2009, Proceedings. Lecture Notes in Computer Science, vol. 5577, pp. 116–126. Springer (2009), http://dx.doi.org/10.1007/978-3-642-02441-2_11
17 | Bille, P.: Fast searching in packed strings. J. Discrete Algorithms 9(1), 49–56(2011), http://dx.doi.org/10.1016/j.jda.2010.09.003
18 | Boyer, R.S., Moore, J.S.: A fast string searching algorithm. Commun. ACM 20(10), 762–772 (1977), http://doi.acm.org/10.1145/359842.359859
19 | Cantone, D., Faro, S.: Searching for a substring with constant extra-space complexity. In: Ferragina, P., Grossi, R. (eds.) Proc. of Third International Conference on Fun with algorithms. pp. 118–131 (2004)
20 | Cantone, D., Cristofaro, S., Faro, S.: A space-efficient implementation of the goodsuffix heuristic. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2010, Prague, Czech Republic, August 30 - September 1, 2010. pp. 63–75. Prague Stringology Club, Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2010), http://www.stringology.org/event/2010/p06.html
21 | Cantone, D., Faro, S.: Fast-search: A new efficient variant of the boyer-moore string matching algorithm. In: Jansen, K., Margraf, M., Mastrolilli, M., Rolim, J.D.P. (eds.) Experimental and Efficient Algorithms, Second International Workshop, WEA 2003, Ascona, Switzerland, May 26-28, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2647, pp. 47–58. Springer (2003), http://dx.doi.org/10.1007/3-540-44867-5_4
22 | Cantone, D., Faro, S.: Fast-search algorithms: New efficient variants of the boyer-moore pattern-matching algorithm. Journal of Automata, Languages and Combinatorics 10(5/6), 589–608 (2005)
23 | Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2013, Prague, Czech Republic, September 2-4, 2013. pp. 92–106. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2013), http://www.stringology.org/event/2013/p09.html
24 | Cantone, D., Faro, S.: Improved and self-tuned occurrence heuristics. J. Discrete Algorithms 28, 73–84 (2014), http://dx.doi.org/10.1016/j.jda.2014.07.006
25 | Cantone, D., Faro, S., Giaquinta, E.: Bit-(parallelism)2: Getting to the next level of parallelism. In: Boldi, P., Gargano, L. (eds.) Fun with Algorithms, 5th International Conference, FUN 2010, Ischia, Italy, June 2-4, 2010. Proceedings. 18 Simone Faro Lecture Notes in Computer Science, vol. 6099, pp. 166–177. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13122-6_18
26 | Cantone, D., Faro, S., Giaquinta, E.: A compact representation of nondeterministic (suffix) automata for the bit-parallel approach. In: Amir, A., Parida, L. (eds.) Combinatorial Pattern Matching, 21st Annual Symposium, CPM 2010, New York, NY, USA, June 21-23, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6129, pp. 288–298. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13509-5_26
27 | Cantone, D., Faro, S., Giaquinta, E.: A compact representation of nondeterministic (suffix) automata for the bit-parallel approach. Inf. Comput. 213, 3–12 (2012), http://dx.doi.org/10.1016/j.ic.2011.03.006
28 | Charras, C., Lecroq, T., Pehoushek, J.D.: A very fast string matching algorithm for small alphabeths and long patterns (extended abstract). In: Farach-Colton [41], pp. 55–64, http://dx.doi.org/10.1007/BFb0030780
29 | Colussi, L.: Correctness and efficiency of the pattern matching algorithms. Inf. Comput. 95(2), 225–251 (1991), http://dx.doi.org/10.1016/0890-5401(91)90046-5
30 | Colussi, L.: Fastest pattern matching in strings. J. Algorithms 16(2), 163–189 (1994), http://dx.doi.org/10.1006/jagm.1994.1008
31 | Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C.: Introduction to Algorithms (3. ed.). MIT Press (2009), http://mitpress.mit.edu/books/introduction-algorithms
32 | Crochemore, M.: String-matching on ordered alphabets. Theor. Comput. Sci. 92(1), 33–47 (1992), http://dx.doi.org/10.1016/0304-3975(92)90134-2
33 | Crochemore, M., Czumaj, A., Gasieniec, L., Jarominek, S., Lecroq, T., Plandowski, W., Rytter, W.: Speeding up two string-matching algorithms. Algorithmica 12(4/5), 247–267 (1994), http://dx.doi.org/10.1007/BF01185427
34 | Crochemore, M., Perrin, D.: Two-way string matching. J. ACM 38(3), 651–675 (1991), http://doi.acm.org/10.1145/116825.116845
35 | Crochemore, M., Rytter, W.: Text Algorithms. Oxford University Press (1994), http://www-igm.univ-mlv.fr/~mac/REC/B1.html
36 | Deusdado, S.A.D., Carvalho, P.: Graspm: an efficient algorithm for exact pattern-matching in genomic sequences. IJBRA 5(4), 385–401 (2009), http://dx.doi.org/10.1504/IJBRA.2009.027510
37 | Durian, B., Chhabra, T., Ghuman, S.S., Hirvola, T., Peltola, H., Tarhio, J.: Improved two-way bit-parallel search. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2014, Prague, Czech Republic, September 1-3, 2014. pp. 71–83. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2014), http://www.stringology.org/event/2014/p08.html
38 | Durian, B., Holub, J., Peltola, H., Tarhio, J.: Tuning BNDM with q-grams. In: Finocchi, I., Hershberger, J. (eds.) Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments, ALENEX 2009, New York, New York, USA, January 3, 2009. pp. 29–37. SIAM (2009), http://dx.doi.org/10.1137/1.9781611972894.3
39 | Durian, B., Peltola, H., Salmela, L., Tarhio, J.: Bit-parallel search algorithms for long patterns. In: Festa, P. (ed.) Experimental Algorithms, 9th International Symposium, SEA 2010, Ischia Island, Naples, Italy, May 20-22, 2010. Proceedings. Lecture Notes in Computer Science, vol. 6049, pp. 129–140. Springer (2010), http://dx.doi.org/10.1007/978-3-642-13193-6_12 Exact Online String Matching Bibliography 19
40 | Fan, H., Yao, N., Ma, H.: Fast variants of the backward-oracle-marching algorithm. In: Proceedings of the 2009 Fourth International Conference on Internet Computing for Science and Engineering. pp. 56–59. ICICSE ’09, IEEE Computer Society, Washington, DC, USA (2009), http://dx.doi.org/10.1109/ICICSE.2009.53
41 | Farach-Colton, M. (ed.): Combinatorial Pattern Matching, 9th Annual Symposium, CPM 98, Piscataway, New Jersey, USA, July 20-22, 1998, Proceedings, Lecture Notes in Computer Science, vol. 1448. Springer (1998)
42 | Faro, S.: Evaluation and improvement of fast algorithms for exact matching on genome sequences. In: 3rd Internanional Conference on Algorithms for Computational Biology. Lecture Notes in Computer Science, Springer (2016)
43 | Faro, S.: A very fast string matching algorithm based on condensed alphabets. In: Algorithmic Aspects in Information and Management - 10th International Conference, AAIM 2016. Proceedings. Lecture Notes in Computer Science, Springer (2016)
44 | Faro, S., Külekci, M.O.: Fast packed string matching for short patterns. In: Sanders, P., Zeh, N. (eds.) Proceedings of the 15th Meeting on Algorithm Engineering and Experiments, ALENEX 2013, New Orleans, Louisiana, USA, January 7, 2013. pp. 113–121. SIAM (2013), http://dx.doi.org/10.1137/1.9781611972931.10
45 | Faro, S., K¨ulekci, M.O.: Fast and flexible packed string matching. J. Discrete Algorithms 28, 61–72 (2014), http://dx.doi.org/10.1016/j.jda.2014.07.003
46 | Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2008, Prague, Czech Republic, September 1-3, 2008. pp. 146–160. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2008), http://www.stringology.org/event/2008/p14.html
47 | Faro, S., Lecroq, T.: Efficient variants of the backward-oracle-matching algorithm. Int. J. Found. Comput. Sci. 20(6), 967–984 (2009), http://dx.doi.org/10.1142/S0129054109006991
48 | Faro, S., Lecroq, T.: The exact string matching problem: a comprehensive experimental evaluation. CoRR abs/1012.2547 (2010), http://arxiv.org/abs/1012.2547
49 | Faro, S., Lecroq, T.: Fast searching in biological sequences using multiple hash functions. In: 12th IEEE International Conference on Bioinformatics & Bioengineering, BIBE 2012, Larnaca, Cyprus, November 11-13, 2012. pp. 175–180. IEEE Computer Society (2012), http://dx.doi.org/10.1109/BIBE.2012.6399669
50 | Faro, S., Lecroq, T.: A fast suffix automata based algorithm for exact online string matching. In: Moreira, N., Reis, R. (eds.) Implementation and Application of Automata - 17th International Conference, CIAA 2012, Porto, Portugal, July 17-20, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7381, pp. 149–158. Springer (2012), http://dx.doi.org/10.1007/978-3-642-31606-7_13
51 | Faro, S., Lecroq, T.: A multiple sliding windows approach to speed up string matching algorithms. In: Klasing, R. (ed.) Experimental Algorithms - 11th International Symposium, SEA 2012, Bordeaux, France, June 7-9, 2012. Proceedings. Lecture Notes in Computer Science, vol. 7276, pp. 172–183. Springer (2012), http://dx.doi.org/10.1007/978-3-642-30850-5_16
52 | Faro, S., Lecroq, T.: The exact online string matching problem: A review of the most recent results. ACM Comput. Surv. 45(2), 13 (2013), http://doi.acm.org/10.1145/2431211.243121220 Simone Faro
53 | Finkel, A., Jantzen, M. (eds.): STACS 92, 9th Annual Symposium on Theoretical Aspects of Computer Science, Cachan, France, February 13-15, 1992, Proceedings, Lecture Notes in Computer Science, vol. 577. Springer (1992)
54 | Franek, F., Jennings, C.G., Smyth, W.F.: A simple fast hybrid pattern-matching algorithm. In: Apostolico, A., Crochemore, M., Park, K. (eds.) Combinatorial Pattern Matching, 16th Annual Symposium, CPM 2005, Jeju Island, Korea, June 19-22, 2005, Proceedings. Lecture Notes in Computer Science, vol. 3537, pp. 288–297. Springer (2005), http://dx.doi.org/10.1007/11496656_25
55 | Franek, F., Jennings, C.G., Smyth, W.F.: A simple fast hybrid pattern-matching algorithm. J. Discrete Algorithms 5(4), 682–695 (2007), http://dx.doi.org/10.1016/j.jda.2006.11.004
56 | Fredriksson, K.: Faster string matching with super-alphabets. In: Laender, A.H.F., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 9th International Symposium, SPIRE 2002, Lisbon, Portugal, September 11-13, 2002, Proceedings. Lecture Notes in Computer Science, vol. 2476, pp. 44–57. Springer (2002), http://dx.doi.org/10.1007/3-540-45735-6_5
57 | Fredriksson, K.: Succinct backward-dawg-matching. ACM Journal of Experimental Algorithmics 13 (2008), http://doi.acm.org/10.1145/1412228.1455263
58 | Fredriksson, K., Grabowski, S.: Practical and optimal string matching. In: Consens, M.P., Navarro, G. (eds.) String Processing and Information Retrieval, 12th International Conference, SPIRE 2005, Buenos Aires, Argentina, November 2-4, 2005, Proceedings. Lecture Notes in Computer Science, vol. 3772, pp. 376–387. Springer (2005), http://dx.doi.org/10.1007/11575832_42
59 | Galil, Z., Giancarlo, R.: On the exact complexity of string matching: Upper bounds. SIAM J. Comput. 21(3), 407–437 (1992), http://dx.doi.org/10.1137/0221028
60 | Galil, Z., Seiferas, J.I.: Time-space-optimal string matching. In: Proceedings of the 13th Annual ACM Symposium on Theory of Computing, May 11-13, 1981, Milwaukee, Wisconsin, USA. pp. 106–113. ACM (1981), http://doi.acm.org/10.1145/800076.802463
61 | Galil, Z., Seiferas, J.I.: Time-space-optimal string matching. J. Comput. Syst. Sci. 26(3), 280–294 (1983), http://dx.doi.org/10.1016/0022-0000(83)90002-8
62 | Hancart, C.: Analyse exacte et en moyenne d’algorithmes de recherche d’un motif dans un texte. Th`ese de doctorat, Universit´e Paris 7 (1993)
63 | He, L., Fang, B., Sui, J.: The wide window string matching algorithm. Theor. Comput. Sci. 332(1-3), 391–404 (2005), http://dx.doi.org/10.1016/j.tcs.2004.12.002
64 | Holub, J., Durian, B.: Talk: Fast variants of bit parallel approach to suffix automata. In: The Second Haifa Annual International Stringology Research Workshop of the Israeli Science Foundation, http://www.cri.haifa.ac.il/events/2005/string/presentations/Holub.pdf (2005)
65 | Horspool, R.N.: Practical fast searching in strings. Softw., Pract. Exper. 10(6), 501–506 (1980), http://dx.doi.org/10.1002/spe.4380100608
66 | Huang, Y., Ping, L., Pan, X., Cai, G.: A fast exact pattern matching algorithmfor biological sequences. In: Proceedings of the 2008 International Conference on BioMedical Engineering and Informatics, BMEI 2008, May 28-30, 2008, Sanya, Hainan, China - Volume 1. pp. 8–12. IEEE Computer Society (2008), http://dx.doi.org/10.1109/BMEI.2008.154
67 | Hudaib, A., Al-Khalid, R., Suleiman, D., Itriq, M., Al-Anani, A.: A fast pattern matching algorithm with two sliding windows (tsw). Journal of Computer Science 4(5), 393–401 (2008) Exact Online String Matching Bibliography 21
68 | Hudaib, A., Al-Khalid, R., Al-Anani, A., Itriq, M., Suleiman, D.: Four sliding windows pattern matching algorithm (fsw). Journal of Software Engineering and Applications 8, 154–165 (2015)
69 | Hume, A., Sunday, D.: Fast string searching. In: Proceedings of the Summer 1991 USENIX Conference, Nashville, TE, USA, June 1991. pp. 221–234. USENIX Association (1991)
70 | Hume, A., Sunday, D.: Fast string searching. Softw., Pract. Exper. 21(11), 1221–1248 (1991), http://dx.doi.org/10.1002/spe.4380211105
71 | Itriq, M., Hudaib, A., Al-Anani, A., Al-Khalid, R., Suleiman, D.: Enhanced two sliding windows algorithm for pattern matching (etsw). Journal of American Science 8, 60–616 (2012)
72 | Kalsi, P., Peltola, H., Tarhio, J.: Comparison of exact string matching algorithms for biological sequences. In: Elloumi, M., K¨ung, J., Linial, M., Murphy, R.F., Schneider, K., Toma, C. (eds.) Bioinformatics Research and Development, Second International Conference, BIRD 2008, Vienna, Austria, July 7-9, 2008, Proceedings. Communications in Computer and Information Science, vol. 13, pp. 417–426. Springer (2008), http://dx.doi.org/10.1007/978-3-540-70600-7_31
73 | Karp, R.M., Rabin, M.O.: Efficient randomized pattern-matching algorithms. IBM Journal of Research and Development 31(2), 249–260 (1987), http://dx.doi.org/10.1147/rd.312.0249
74 | Knuth, D.E., Jr., J.H.M., Pratt, V.R.: Fast pattern matching in strings. SIAM J. Comput. 6(2), 323–350 (1977), http://dx.doi.org/10.1137/0206024
75 | Külekci, M.O.: A method to overcome computer word size limitation in bit-parallel pattern matching. In: Hong, S., Nagamochi, H., Fukunaga, T. (eds.) Algorithms and Computation, 19th International Symposium, ISAAC 2008, Gold Coast, Australia, December 15-17, 2008. Proceedings. Lecture Notes in Computer Science, vol. 5369, pp. 496–506. Springer (2008), http://dx.doi.org/10.1007/978-3-540-92182-0_45
76 | Külekci, M.O.: Filter based fast matching of long patterns by using SIMD instructions. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2009, Prague, Czech Republic, August 31 - September 2, 2009. pp. 118–128. Prague Stringology Club, Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague (2009), http://www.stringology.org/event/2009/p11.html
77 | Lecroq, T.: A variation on the boyer-moore algorithm. Theor. Comput. Sci. 92(1), 119–144 (1992), http://dx.doi.org/10.1016/0304-3975(92)90139-7
78 | Lecroq, T.: Fast exact string matching algorithms. Inf. Process. Lett. 102(6), 229–235 (2007), http://dx.doi.org/10.1016/j.ipl.2007.01.002
79 | Liu, C., Wang, Y., Liu, D., Li, D.: Two improved single pattern matching algorithms. In: 16th International Conference on Artificial Reality and Telexistence, ICAT 2006, Hangzhou, China, November 29 - December 1, 2006, Workshops Proceedings. pp. 419–422. IEEE Computer Society (2006), http://dx.doi.org/10.1109/ICAT.2006.134
80 | Morris, Jr, J.H., Pratt, V.R.: A linear pattern-matching algorithm. Report 40, University of California, Berkeley (1970)
81 | Navarro, G.: Nr-grep: a fast and flexible pattern-matching tool. Softw., Pract. Exper. 31(13), 1265–1312 (2001), http://dx.doi.org/10.1002/spe.411
82 | Navarro, G., Raffinot, M.: A bit-parallel approach to suffix automata: Fast extended string matching. In: Farach-Colton [41], pp. 14–33, http://dx.doi.org/10.1007/BFb003077822 Simone Faro
83 | Navarro, G., Raffinot, M.: Fast and flexible string matching by combining bit-parallelism and suffix automata. ACM Journal of Experimental Algorithmics 5, 4 (2000), http://doi.acm.org/10.1145/351827.384246
84 | Nebel, M.E.: Fast string matching by using probabilities: On an optimal mismatch variant of horspool’s algorithm. Theor. Comput. Sci. 359(1-3), 329–343 (2006), http://dx.doi.org/10.1016/j.tcs.2006.05.028
85 | Peltola, H., Tarhio, J.: Alternative algorithms for bit-parallel string matching. In: Nascimento, M.A., de Moura, E.S., Oliveira, A.L. (eds.) String Processing and Information Retrieval, 10th International Symposium, SPIRE 2003, Manaus, Brazil, October 8-10, 2003, Proceedings. Lecture Notes in Computer Science, vol. 2857, pp. 80–94. Springer (2003), http://dx.doi.org/10.1007/978-3-540-39984-1_7
86 | Peltola, H., Tarhio, J.: Variations of forward-sbndm. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2011, Prague, Czech Republic, August 29-31, 2011. pp. 3–14. Prague Stringology Club, Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2011), http://www.stringology.org/event/2011/p02.html
87 | Peltola, H., Tarhio, J.: String matching with lookahead. Discrete Applied Mathematics 163, 352–360 (2014), http://dx.doi.org/10.1016/j.dam.2013.10.034
88 | Raita, T.: Tuning the boyer-moore-horspool string searching algorithm. Softw., Pract. Exper. 22(10), 879–884 (1992), http://dx.doi.org/10.1002/spe.4380221006
89 | Sahli, M., Shibuya, T.: Max-shift BM and max-shift horspool: Practical fast exact string matching algorithms. JIP 20(2), 419–425 (2012), http://dx.doi.org/10.2197/ipsjjip.20.419
90 | Senapati, K., Mal, S., Sahoo, G.: Rs-a fast pattern matching algorithm for biological sequences. International Journal of Engineering and Innovative Technology 1, 116–118 (2012)
91 | Sheik, S.S., Aggarwal, S.K., Poddar, A., Balakrishnan, N., Sekar, K.: A FAST pattern matching algorithm. Journal of Chemical Information and Modeling 44(4), 1251–1256 (2004), http://dx.doi.org/10.1021/ci030463z
92 | Simon, I.: String matching algorithms and automata. In: Karhum¨aki, J., Maurer, H.A., Rozenberg, G. (eds.) Results and Trends in Theoretical Computer Science, Colloquium in Honor of Arto Salomaa, Graz, Austria, June 10-11, 1994, Proceedings. Lecture Notes in Computer Science, vol. 812, pp. 386–395. Springer (1994), http://dx.doi.org/10.1007/3-540-58131-6_61
93 | Smith, P.D.: Experiments with a very fast substring search algorithm. Softw., Pract. Exper. 21(10), 1065–1074 (1991), http://dx.doi.org/10.1002/spe.4380211006
94 | Suleiman, D., Hudaib, A., Al-Anani, A., R., A.K., Itriq, M.: Ers-a algorithm for pattern matching. Middle East Journal of Scientific Research 15, 1067–1075 (2013)
95 | Suleiman, D., Itriq, M., Al-Anani, A., Al-Khalid, R., Hudaib, A.: Enhancing ersa algorithm for pattern matching (eers-a). Journal of Software Engineering and Applications 8, 143–153 (2015)
96 | Sunday, D.: A very fast substring search algorithm. Commun. ACM 33(8), 132–142 (1990), http://doi.acm.org/10.1145/79173.79184
97 | Sustik, M., Moore, J.: String searching over small alphabets. In: Technical Report TR-07-62. Department of Computer Sciences, University of Texas at Austin (2007) Exact Online String Matching Bibliography 23
98 | Watson, B.W., Kourie, D.G., Cleophas, L.G.: Quantum leap pattern matching. In: Holub, J., Zd´arek, J. (eds.) Proceedings of the Prague Stringology Conference 2015, Prague, Czech Republic, August 24-26, 2015. pp. 104–117. Department of Theoretical Computer Science, Faculty of Information Technology, Czech Technical University in Prague (2015), http://www.stringology.org/event/2015/p11.html
99 | Yao, A.C.: The complexity of pattern matching for a random string. SIAM J. Comput. 8(3), 368–387 (1979), http://dx.doi.org/10.1137/0208029
100 | Zhang, G., Zhu, E., Mao, L., Yin, M.: A bit-parallel exact string matching algorithm for small alphabet. In: Deng, X., Hopcroft, J.E., Xue, J. (eds.) Frontiers in Algorithmics, Third International Workshop, FAW 2009, Hefei, China, June 20-23, 2009. Proceedings. Lecture Notes in Computer Science, vol. 5598, pp. 336–345. Springer (2009), http://dx.doi.org/10.1007/978-3-642-02270-8_34
101 | Zhu, R.F., Takaoka, T.: On improving the average case of the Boyer-Moore string matching algorithm. J. Inform. Process. 10(3), 173–177 (1987)
--------------------------------------------------------------------------------