The document describes the dynamic programming algorithm for calculating the edit distance between two strings. It defines edit distance as the minimum number of insertions, deletions or substitutions needed to change one string into the other. The algorithm uses a table c[i,j] to store the edit distance between the prefixes of the two strings x[1..i] and y[1..j], calculating values in the table using a recursive formula until it reaches the final edit distance value c[|x|,|y|].
Nghiên cứu kỹ thuật ghép kênh tín hiệu số nâng cao hiệu suất sử dụng băng tần trong SDH. Thông tin quang SDH là công nghệ ghép kênh cố định. Vì vậy độ rộng băng tần vẫn không đƣợc tận dụng triệt để. Theo ƣớc tính thì hiệu suất sử dụng độ rộng băng tần khả dụng của hệ thống thông tin quang SDH mới đạt đƣợc 50%. Trƣớc thực tế một mặt độ rộng băng tần đƣờng truyền còn bị lãng phí, mặt khác công nghệ truyền gói IP và ATM đòi hỏi hệ thống thông tin quang SDH phải thoả mãn nhu cầu trƣớc mắt và cả cho tƣơng lai, khi mà các dịch vụ gia tăng phát triển ở trình độ cao. Chỉ có thể thoả mãn nhu cầu về tốc độ truyền dẫn và nâng cao hiệu suất sử dụng băng tần đƣờng truyền bằng cách thay đổi các phƣơng thức truyền tải lƣu lƣợng số liệu.
Nghiên cứu kỹ thuật ghép kênh tín hiệu số nâng cao hiệu suất sử dụng băng tần trong SDH. Thông tin quang SDH là công nghệ ghép kênh cố định. Vì vậy độ rộng băng tần vẫn không đƣợc tận dụng triệt để. Theo ƣớc tính thì hiệu suất sử dụng độ rộng băng tần khả dụng của hệ thống thông tin quang SDH mới đạt đƣợc 50%. Trƣớc thực tế một mặt độ rộng băng tần đƣờng truyền còn bị lãng phí, mặt khác công nghệ truyền gói IP và ATM đòi hỏi hệ thống thông tin quang SDH phải thoả mãn nhu cầu trƣớc mắt và cả cho tƣơng lai, khi mà các dịch vụ gia tăng phát triển ở trình độ cao. Chỉ có thể thoả mãn nhu cầu về tốc độ truyền dẫn và nâng cao hiệu suất sử dụng băng tần đƣờng truyền bằng cách thay đổi các phƣơng thức truyền tải lƣu lƣợng số liệu.
Existence of positive solutions for fractional q-difference equations involvi...IJRTEMJOURNAL
The existence of positive solutions is considered for a fractional q-difference equation with pLaplacian operator in this article. By employing the Avery-Henderson fixed point theorem, a new result is obtained
for the boundary value problems.
ملزمة الرياضيات للصف السادس الاحيائي الفصل الاولanasKhalaf4
طبعة جديدة ومنقحة
حل تمارين الكتاب
شرح المواضيع الرياضية بالتفصيل وبأسلوب واضح ومفهوم لجميع المستويات
حلول الاسألة الوزارية
اعداد الدكتور أنس ذياب خلف
email: anasdhyiab@gmail.com
ملزمة الرياضيات للصف السادس التطبيقي الفصل الاول الاعداد المركبة 2022anasKhalaf4
طبعة جديدة ومنقحة
حل تمارين الكتاب
شرح المواضيع الرياضية بالتفصيل وبأسلوب واضح ومفهوم لجميع المستويات
حلول الاسألة الوزارية
اعداد الدكتور أنس ذياب خلف
email: anasdhyiab@gmail.com
Existence of positive solutions for fractional q-difference equations involvi...IJRTEMJOURNAL
The existence of positive solutions is considered for a fractional q-difference equation with pLaplacian operator in this article. By employing the Avery-Henderson fixed point theorem, a new result is obtained
for the boundary value problems.
ملزمة الرياضيات للصف السادس الاحيائي الفصل الاولanasKhalaf4
طبعة جديدة ومنقحة
حل تمارين الكتاب
شرح المواضيع الرياضية بالتفصيل وبأسلوب واضح ومفهوم لجميع المستويات
حلول الاسألة الوزارية
اعداد الدكتور أنس ذياب خلف
email: anasdhyiab@gmail.com
ملزمة الرياضيات للصف السادس التطبيقي الفصل الاول الاعداد المركبة 2022anasKhalaf4
طبعة جديدة ومنقحة
حل تمارين الكتاب
شرح المواضيع الرياضية بالتفصيل وبأسلوب واضح ومفهوم لجميع المستويات
حلول الاسألة الوزارية
اعداد الدكتور أنس ذياب خلف
email: anasdhyiab@gmail.com
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Welcome to the first live UiPath Community Day Dubai! Join us for this unique occasion to meet our local and global UiPath Community and leaders. You will get a full view of the MEA region's automation landscape and the AI Powered automation technology capabilities of UiPath. Also, hosted by our local partners Marc Ellis, you will enjoy a half-day packed with industry insights and automation peers networking.
📕 Curious on our agenda? Wait no more!
10:00 Welcome note - UiPath Community in Dubai
Lovely Sinha, UiPath Community Chapter Leader, UiPath MVPx3, Hyper-automation Consultant, First Abu Dhabi Bank
10:20 A UiPath cross-region MEA overview
Ashraf El Zarka, VP and Managing Director MEA, UiPath
10:35: Customer Success Journey
Deepthi Deepak, Head of Intelligent Automation CoE, First Abu Dhabi Bank
11:15 The UiPath approach to GenAI with our three principles: improve accuracy, supercharge productivity, and automate more
Boris Krumrey, Global VP, Automation Innovation, UiPath
12:15 To discover how Marc Ellis leverages tech-driven solutions in recruitment and managed services.
Brendan Lingam, Director of Sales and Business Development, Marc Ellis
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Wu Mamber (String Algorithms 2007)
1. Approximate k-edit-distance Approximative ( k -distance) matching, now for edit distance Given string x = abbacbbbababacabbbba and pattern p = bbba find all “almost”-occurrences of p ind x x = a bba c bbba babacab b a bba 17 6 1
2. Edit distance The edit-distance between strings x and y is the minimal number of - insertions - deletions - substitutions needed to translate x into y d( abab,acc ) = 3: abab -> aba -> aca -> acc d( abab,aac ) = 2: abab -> aab -> aac
3. Calculating the edit-distance Basis cases: - string vs empty string: d (x,””) = d( ””,x) = | x | - two single characters: d(a,b) = 1 if a!=b 0 if a==b
4. Calculating the edit-distance Recursion: - two non-empty strings: d( x [1..i], y [1..j]) = d( x [1..i-1], y [1..j])+1 min d( x [1..i], y [1..j-1])+1 d( x [1..i-1], y [1..j-1])+d( x [i], y [j]) { i j i j i j
5. Dynamic programming algorithm Use table c[i,j] = d( x [1..i], y [1..j]) Initialize: c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j Main algorithm: for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { c[i-1,j] c[i,j-1] c[i-1,j-1] c[i,j]
6. Example a b a b c a 0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) {
7. Example a b a b c a 0+0 1+1 1+1 0 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 2 3 4 5 6
8. Example a b a b c a 1+1 2+1 0+1 1 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6
9. Example a b a b c a 2+0 3+1 1+1 2 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 2 3 4 5 6
10. Example a b a b c a 3+0 4+1 2+1 3 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 2 3 4 5 6
11. Example a b a b c a 4+1 5+1 3+1 4 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 2 3 4 5 6
12. Example a b a b c a 5+1 6+1 4+1 5 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 2 3 4 5 6
13. Example a b a b c a 6+1 7+1 5+1 6 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 2 3 4 5 6
14. Example a b a b c a 7+1 8+1 6+1 7 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 3 4 5 6
15. Example a b a b c a 1+1 0+1 2+1 1 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 3 4 5 6
16. Example a b a b c a 0+0 1+1 1+1 0 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 3 4 5 6
17. Example a b a b c a 1+1 2+1 0+1 1 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 1 3 4 5 6
18. Example a b a b c a 2+1 3+1 1+1 2 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 1 2 3 4 5 6
19. Example a b a b c a 3+1 4+1 2+1 3 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 1 2 3 3 4 5 6
20. Example a b a b c a 4+0 5+1 3+1 4 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 1 2 3 4 3 4 5 6
21. Example a b a b c a 5+1 6+1 4+1 5 a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 1 2 3 4 5 3 4 5 6
22. Example a b a b c a a b a a c b c c c[0,0] = 0 for i=1..| x |: c[i,0] = i for j=1..| p |: c[0,j] = j for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) { 0 1 2 3 4 5 6 7 8 1 0 1 2 3 4 5 6 7 2 1 0 1 2 3 4 5 6 3 2 1 0 1 2 3 4 5 4 3 2 1 1 2 2 3 4 5 4 3 2 2 1 2 2 3 6 5 4 3 2 2 2 3 3
23. Dynamic programming algorithm After filling out c, d( x , y )=c[| x |,| y |] Time and space complexity: O(| x || y |)
24. Approximate pattern matching j=0 1 2 3 4 5 i= 0 1 2 3 4 5 6 7 8 9 10 11 12 13 c[i,j] = d( x [1..i], y [1..j]) j=0 1 2 3 4 5 i= 0 1 2 3 4 5 6 7 8 9 10 11 12 13 c[i,j] = min i' ≤ i d( x [i'..i], y [1..j]) j j i i i' Edit distance Edit distance pattern matching
25. Approximate pattern matching Use table c[i,j] = min i' ≤ i d( x [1..i], y [1..j]) Initialize: c[0,0] = 0 for i=1..| x |: c[i,0] = 0 for j=1..| p |: c[0,j] = j Main algorithm: for i=1..| x |: for j=1..| p |: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) {
26. Approximate pattern matching After filling out, in time and space O(| x || p |) all indices i, where c[i,| p |] ≤ k , correspond to one or more approximate matches. Some backtracking is needed to find the corresponding i' indices ... we can find one i' for each i in time O(| p |) per i , for a total time of O(| x || p |). (Theorem 10.1.1) (More complicated to get all matches...)
27. Wu-Manber We define a matrix s – the state of matching so far – by: s [ q , j ] = 0 iff d( x [ i-j+1 .. i ], p [1.. j ]) ≤ q for j =0..| p |, and q =0.. k i j
28. Wu-Manber As before, we use a pre-calculated bit-matrix: t [h,j] = 0 if p [j] == h 1 if p [j] != h with rows indexed by the alphabet and columns indexed by indices in p
29. Wu-Manber The recursion: c[i-1,j] + 1 c[i,j] = min c[i,j-1] + 1 c[i-1,j-1] + d( x [i], y [j]) becomes: s i-1 [q-1, j] s i [q,j] = & s i [q-1,j-1] s i-1 [q-1,j-1] & ( s i-1 [q,j-1] | t [ x [i],j]) { {
30. Wu-Manber The expression: s i-1 [q-1, j] s i [q,j] = & s i [q-1,j-1] s i-1 [q-1,j-1] & ( s i-1 [q,j-1] | t [ x [i],j]) can be computed as: old = s s [0] = (old[0] >> 1) | t [ x [i]] // SHIFT-and-OR for q=1..k: s1 = old[q-1] // s1[j] = s i-1 [q-1, j] s2 = s [q-1] >> 1 // s2[j] = s i [q-1,j-1] s3 = s1 >> 1 // s3[j] = s i-1 [q-1,j-1] s4 = old[q] >> 1 // s4[j] = s i-1 [ q,j-1] s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) {
32. Example x = bbacbbbababacabbbba i=0 p = bbba 01234 s 0 [0]: 01111 s 0 [1]: 01111 s 0 [2]: 01111
33. Example x = b bacbbbababacabbbba i=1 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 = 00 111 | 0000 1 s 0 [1]: 01111 s 1 [1]: s 0 [2]: 01111 s 1 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = bb b a
34. Example x = b bacbbbababacabbbba i=1 01234 01234 s 0 [0]: 01111 s 1 [0]: 0 0 111 = 00 111 | 0000 1 s 0 [1]: 01111 s 1 [1]: s 0 [2]: 01111 s 1 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = bb b a 0 edit distance match
35. Example x = b bacbbbababacabbbba i=1 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 = 00 111 | 0000 1 s 0 [1]: 01111 s 1 [1]: s 0 [2]: 01111 s 1 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = bb b a Not 0 edit distance match
36. Example x = b bacbbbababacabbbba i=1 p = b bba 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 s 0 [1]: 01111 s 1 [1]: 0 00 11 = 0 1111 & 000 11 s 0 [2]: 01111 s 1 [2]: & 00 111 & ( 00 111 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b b ba p = bb b a p = bb b a
37. Example x = b bacbbbababacabbbba i=1 p = b bba 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 s 0 [1]: 01111 s 1 [1]: 0 00 11 = 0 1111 & 000 11 s 0 [2]: 01111 s 1 [2]: & 00 111 & ( 00 111 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b b ba p = bb b a p = bb b a 1 edit distance match
38. Example x = b bacbbbababacabbbba i=1 p = b bba 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 s 0 [1]: 01111 s 1 [1]: 0 00 11 = 0 1111 & 000 11 s 0 [2]: 01111 s 1 [2]: & 00 111 & ( 00 111 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b b ba p = bb b a p = bb b a Not 1 edit distance match
39. Example x = b bacbbbababacabbbba i=1 p = b bba 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 s 0 [1]: 01111 s 1 [1]: 000 11 s 0 [2]: 01111 s 1 [2]: 0000 1 = 0 1111 & 0000 1 & 00 111 & ( 00 111 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b b ba p = bb b a p = bb b a
40. Example x = b bacbbbababacabbbba i=1 p = b bba 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 s 0 [1]: 01111 s 1 [1]: 000 11 s 0 [2]: 01111 s 1 [2]: 0000 1 = 0 1111 & 0000 1 & 00 111 & ( 00 111 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b b ba p = bb b a p = bb b a 2 edit distance match
41. Example x = b bacbbbababacabbbba i=1 p = b bba 01234 01234 s 0 [0]: 01111 s 1 [0]: 00 111 s 0 [1]: 01111 s 1 [1]: 000 11 s 0 [2]: 01111 s 1 [2]: 0000 1 = 0 1111 & 0000 1 & 00 111 & ( 00 111 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b b ba p = bb b a p = bb b a Not 2 edit distance match
42. Example x = bb acbbbababacabbbba i=2 p = b bba 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 = 000 11 | 0000 1 s 1 [1]: 00011 s 2 [1]: s 1 [2]: 00001 s 2 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = bb ba p = b bb a p = b bb a
43. Example x = bb acbbbababacabbbba i=2 p = b bba 01234 01234 s 1 [0]: 00111 s 2 [0]: 0 00 11 = 000 11 | 0000 1 s 1 [1]: 00011 s 2 [1]: s 1 [2]: 00001 s 2 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = bb ba p = b bb a p = b bb a 0 edit distance match
44. Example x = bb acbbbababacabbbba i=2 p = b bba 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 = 000 11 | 0000 1 s 1 [1]: 00011 s 2 [1]: s 1 [2]: 00001 s 2 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = bb ba p = b bb a p = b bb a Not 0 edit distance match
45. Example x = bb acbbbababacabbbba i=2 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 s 1 [1]: 00011 s 2 [1]: 0000 1 = 00 111 & 0000 1 s 1 [2]: 00001 s 2 [2]: & 000 11 & ( 0000 1 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = bb ba p = b bb a p = b bb a
46. Example x = bb acbbbababacabbbba i=2 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 s 1 [1]: 00011 s 2 [1]: 0 000 1 = 00 111 & 0000 1 s 1 [2]: 00001 s 2 [2]: & 000 11 & ( 0000 1 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = bb ba p = b bb a p = b bb a 1 edit distance match
47. Example x = bb acbbbababacabbbba i=2 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 s 1 [1]: 00011 s 2 [1]: 0000 1 = 00 111 & 0000 1 s 1 [2]: 00001 s 2 [2]: & 000 11 & ( 0000 1 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = bb ba p = b bb a p = b bb a Not 1 edit distance match
48. Example x = bb acbbbababacabbbba i=2 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 s 1 [1]: 00011 s 2 [1]: 0000 1 s 1 [2]: 00001 s 2 [2]: 00000 = 000 11 & 00000 & 0000 1 & ( 00000 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = bb ba p = b bb a p = b bb a
49. Example x = bb acbbbababacabbbba i=2 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 s 1 [1]: 00011 s 2 [1]: 0000 1 s 1 [2]: 00001 s 2 [2]: 0 0000 = 000 11 & 00000 & 0000 1 & ( 00000 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = bb ba p = b bb a p = b bb a 2 edit distance match
50. Example x = bb acbbbababacabbbba i=2 01234 01234 s 1 [0]: 00111 s 2 [0]: 000 11 s 1 [1]: 00011 s 2 [1]: 0000 1 s 1 [2]: 00001 s 2 [2]: 0 000 0 = 000 11 & 00000 & 0000 1 & ( 00000 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = bb ba p = b bb a p = b bb a 2 edit distance match
51. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 = 0000 1 | 0 111 0 s 2 [1]: 00001 s 3 [1]: s 2 [2]: 00000 s 3 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba
52. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 = 0000 1 | 0 111 0 s 2 [1]: 00001 s 3 [1]: s 2 [2]: 00000 s 3 [2]: old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba Not 0 edit distance match
53. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 s 2 [1]: 00001 s 3 [1]: 00000 = 0000 1 & 00 111 s 2 [2]: 00000 s 3 [2]: & 00000 & ( 00000 | 0 111 0 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba
54. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 s 2 [1]: 00001 s 3 [1]: 0 0000 = 0000 1 & 00 111 s 2 [2]: 00000 s 3 [2]: & 00000 & ( 00000 | 0 111 0 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba 1 edit distance match
55. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 s 2 [1]: 00001 s 3 [1]: 00000 s 2 [2]: 00000 s 3 [2]: 00000 = 0000 1 & 00000 & 00000 & ( 00000 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba
56. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 s 2 [1]: 00001 s 3 [1]: 00000 s 2 [2]: 00000 s 3 [2]: 0 0000 = 0000 1 & 00000 & 00000 & ( 00000 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba 2 edit distance match
57. Example x = bba cbbbababacabbbba i=3 01234 01234 s 2 [0]: 00011 s 3 [0]: 0 1111 s 2 [1]: 00001 s 3 [1]: 00000 s 2 [2]: 00000 s 3 [2]: 0 000 0 = 0000 1 & 00000 & 00000 & ( 00000 | 0000 1 ) old = s s [0] = (old[0] >> 1) | t [ x [i]] for q=1..k: s1 = old[q-1] s2 = s [q-1] >> 1 s3 = s1 >> 1 s4 = old[q] >> 1 s [q] = s1 & s2 & s3 & (s4 | t [ x [i]]) p = b bba p = b b ba p = bb b a p = b bba 2 edit distance match