0% found this document useful (0 votes)
27 views15 pages

Final Course Pack ADA (R1UC404B)

The document outlines a comprehensive course on the Design & Analysis of Algorithms, detailing its objectives, outcomes, and assessment methods. It includes a structured lesson plan, prerequisites, and a list of practical programming assignments to reinforce theoretical concepts. The course aims to equip students with skills to analyze and design algorithms for various problem-solving scenarios in computer science.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views15 pages

Final Course Pack ADA (R1UC404B)

The document outlines a comprehensive course on the Design & Analysis of Algorithms, detailing its objectives, outcomes, and assessment methods. It includes a structured lesson plan, prerequisites, and a list of practical programming assignments to reinforce theoretical concepts. The course aims to equip students with skills to analyze and design algorithms for various problem-solving scenarios in computer science.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

COURSE PACK

SCHEME
The scheme is an overview of work-integrated learning opportunities and gets students out into the real
world. This will give what a course entails.

Course Title Design & Analysis of Algorithms Course Type Comprehensive

Course Code R1UC404B Class B.Tech Core and All


specialization
Activity Credits Credit Hours Total Number of Classes Assessment
per Semester in Weightage
Lecture 3 4
Tutorial 0 0

Practical
Tutorial
Theory

Learning
Instruction

Self-
delivery

CIE

SE
Practical 2 4

E
Self-Learning 0 0
Total 5 8 45 0 30 0 50% 50%
Course Lead: Dr. Ashok Kumar Yadav
Names Course Coordinator: Dr. Mili Dhar
Coordinators Theory Practical
and • Abhishek Kumar Pandey • Abhishek Kumar Pandey
Instructors • Albert Mundu • Albert Mundu
• Anurag Maurya • Anurag Maurya
• Ashok Kumar Yadav • Ashok Kumar Yadav
(GUSCSE202332838) (GUSCSE202332838)
• Baldivya Mitra • Baldivya Mitra
• Harshit Jain • Harshit Jain
• Mandeep (GUSCSE202332639) • Mandeep
• Mili Dhar (GUSCSE202332639)
• Mithilesh Kumar Yadav • Mili Dhar
• Neha Singh (GUSCSE202332663) • Mithilesh Kumar Yadav
• Nitin Jain • Neha Singh
• Pardeep Singh (GUSCSE202332663)
• Pooja • Nitin Jain
• Poonam Verma • Pardeep Singh
• Pradeep Chauhan • Pooja
• Pravin Kumar • Poonam Verma
• Radha Rani • Pradeep Chauhan
• Sachin Kumar Tyagi • Pravin Kumar
• Sayooj Devadas K • Radha Rani
• Shachi Mall • Sachin Kumar Tyagi
• Shalaka Tyagi • Sayooj Devadas K
• Sunil Kumar (31672) • Shachi Mall

COURSEPACK |
• Tushar Mehrotra • Shalaka Tyagi
• Vartika Mishra • Sunil Kumar (31672)
• Vikas Arya • Tushar Mehrotra
• Vartika Mishra
• Vikas Arya

COURSE OVERVIEW
An Algorithm is a sequence of steps to solve a problem. Design and Analysis of Algorithm is very important for
designing algorithm to solve different types of problems in the branch of computer science and information technology.
This tutorial introduces the fundamental concepts of Designing Strategies, Complexity analysis of Algorithms,
followed by problems on Graph Theory and Sorting methods. This tutorial also includes the basic concepts on
Complexity theory.

PREREQUISITE COURSE

PREREQUISITE COURSE REQUIRED YES

If, yes please fill in the details

Prerequisite course code Prerequisite course name

BCE20361 Data Structures

COURSE OBJECTIVES

• Analyze and design different searching and sorting algorithm algorithms based upon different designing
approaches.
• Analyze and design different tree algorithms based upon different designing approaches.
• Design efficient algorithmic techniques for solving industry oriented real time problems using Greedy Algorithm.
• Design efficient algorithmic techniques for solving industry oriented real time problems using Dynamic Programming.
• Apply and synthesize efficient algorithms.

COURSEPACK |
COURSE OUTCOMES(COs)

After the completion of the course, the student will be able to


C01 Able to analyze the algorithms and find out their time and space complexity.

C02 Able to apply the concepts of brute force and divide and conquer techniques in
problem solving,
C03 Apply and understand the mathematical criterion for deciding whether an algorithm
is efficient, and know many practically important problems that do not admit any
efficient algorithms.
C04 Analyze and apply classical sorting, searching, optimization and graph algorithms.
C05 Apply and understand basic techniques for designing algorithms, including the
techniques of recursion, dynamic programming, and greedy.

BLOOM’S LEVEL OF THE COURSE OUTCOMES

Bloom's taxonomy is a set of hierarchical models used for the classification of educational learning objectives into
levels of complexity and specificity. The learning domains are cognitive, affective, and psychomotor.

COMPREHENSIVE
Remember Understand Apply Analyse Evaluate Create
CO No. KL1 KL2 KL3 KL4 KL5 KL6
C01 √
C02 √
C03 √
C04 √
C05 √

COURSEPACK |
PROGRAM OUTCOMES (POs): PO1 Computing Science knowledge: Apply the knowledge
of mathematics, statistics, computing science and information science fundamentals to the solution of
complex computer application problems.

PO2 Problem analysis: Identify, formulate, review research literature, and analyze complex computing
science problems reaching substantiated conclusions using first principles of mathematics, natural sciences,
and computer sciences.

PO3 Design/development of solutions: Design solutions for complex computing problems and design
system components or processes that meet the specified needs with appropriate consideration for the public
health and safety, and the cultural, societal, and environmental considerations.

PO4 Conduct investigations of complex problems: Use research-based knowledge and research methods
including design of experiments, analysis and interpretation of data, and synthesis of the information to provide
valid conclusions.

PO5 Modern tool usage: Create, select, and apply appropriate techniques, resources, and modern computing
science and IT tools including prediction and modeling to complex computing activities with an
understanding of the limitations.

PO6 IT specialist and society: Apply reasoning informed by the contextual knowledge to assess societal,
health, safety, legal and cultural issues and the consequent responsibilities relevant to the professional
computing science and information science practice.

PO7 Environment and sustainability: Understand the impact of the professional computing science
solutions in societal and environmental contexts, and demonstrate the knowledge of, and need for sustainable
development.

PO8 Ethics: Apply ethical principles and commit to professional ethics and responsibilities and norms of
the computing science practice.

PO9 Individual and team work: Function effectively as an individual, and as a member or leader in diverse
teams, and in multidisciplinary settings.

PO10 Communication: Communicate effectively on complex engineering activities with the IT analyst
community and with society at large, such as, being able to comprehend and write effective reports and
design documentation, make effective presentations, and give and receive clear instructions.

PO11 Project management and finance: Demonstrate knowledge and understanding of the computing
science and management principles and apply these to one’s own work, as a member and leader in a team, to
manage projects and in multidisciplinary environments.

PO12 Life-long learning: Recognize the need for, and have the preparation and ability to engage in
independent and life-long learning in the broadest context of technological change.

COURSEPACK |
Program Specific Outcomes (PSO’s)
PSO1: Have the ability to work with emerging technologies in computing requisite to Industry 4.0.
PSO2: Demonstrate Engineering Practice learned through industry internship and research project to
solve live problems in various domains.

COURSE ARTICULATIONMATRIX
The Course articulation matrix indicates the correlation between Course Outcomes and Program Outcomes and
their expected strength of mapping in three levels (low, medium, and high).

PSO1

PSO2
COs#/

PO10

PO11

PO12
PO1

PO2

PO3

PO4

PO5

PO6

PO7

PO8

PO9
POs

404B.1 3 3 3 2 2

404B.2 3 2 2 2 2
2

404B.3 3 2 2 2 2

404B.4 3 2 2 2 2

404B.5 3 3 3 3 3 2 2

Note: 1-Low, 2-Medium, 3-High

COURSE ASSESSMENT
The course assessment patterns are the assessment tools used both in formative and summative examinations.

COURSEPACK |
COURSE CONTENT

THEORY
Content

Introduction
Notion of an Algorithm, Fundamentals of Algorithmic Problem Solving, Problem Types, Analysis of
Algorithm Efficiency, Asymptotic Notations and their properties, Analysis Framework, Empirical Analysis,
Mathematical analysis for Recursive and Non-recursive algorithms, Solving Recurrence relations.

Brute Force and Divide-and-Conquer


Brute Force: String Matching, Traveling Salesman Problem, Knapsack Problem, Assignment problem.
Divide and conquer: Merge sort, Quick sort, Binary search, Heap sort, Strassen’s Matrix Multiplication

Greedy Technique and Dynamic Programming


Greedy Technique: Minimum spanning tree, Prim’s and Kruskal's Algorithm, Huffman Trees and Codes,
fractional Knapsack Problem, Graph algorithms: Topological sort, Dijkstra's Algorithm.

Dynamic Programming: Principle of optimality. Coin-Exchange Problem, Longest Common Subsequence


Problem, Travelling Salesman Problem, Multi stage graph, All pair shortest paths: Floyd–Warshall
algorithm, Knapsack Problem.

Backtracking and Branch & Bound


Backtracking: n-Queens problem, Subset sum problem, Graph Coloring
Branch & Bound: Knapsack Problem, Traveling Salesman Problem

Iterative Improvement and Limitations of Algorithm Power:


Introduction to P, NP NP- Complete and NP Hard Problems, Introduction to Approximation algorithms,
Approximation Algorithms for NP-Hard Problems, Traveling Salesman problem, Knapsack problem.

COURSEPACK |
PRACTICAL
Contents
1 Write a program to sort given set of numbers in ascending/descending order using Bubble sort and also
search a number using binary search.

2 Write a program to sort given set of numbers in ascending/descending order using Insertion sort and also
search a number using linear search.

3 Write a program to sort given set of numbers in ascending/descending order using Quick sort and any
other sorting algorithm. Also record the time taken by these two programs and compare them.

4 Write a program to sort given set of numbers using Heap sort.

5 Write a program to sort given set of numbers Counting Sort.


6 Write a program to sort given set of numbers in ascending/descending order using merge sort
7 Implement a Naive string-matching approach
8 Implement Rabin Karp string-matching approach
9 Write a program to implement Matrix Chain Multiplication.
10 Implement KMP string-matching approach
11 Write a program to sort a given set of numbers without comparing/swapping

12 Write a program to sort a given set of numbers using Maxhipify

13 WAP to implement fractional knapsack problem


14 WAP to implement Strassen’s Matrix Multiplication
15 Write a program to implement minimum spanning trees using Prims algorithm
16 Write a program to implement Knapsack using
Greedy technique.
17 Write a program to implement the Bellman-Ford Algorithm.
18 Compute the transitive closure of a given directed graph using Warshall's algorithm. Write a program to
implement the shortest path algorithm
19 Write a program to solve the LCS problem.
20 Write a program to implement Knapsack using
the dynamic technique.
21 Write a program to implement the n-Queen Problem using backtracking.
22 Write a program to implement coin -exchange Problem
23 Write a program to implement sum of subset problem
24 Write a program to implement graph coloring technique
25 Obtain the Topological ordering of vertices in a given digraph.
26 Implement TCS using branch and bound method
27 Write a program to implement the Greedy algorithm using Activity Selection Problem.
28 WAP to implement Huffman Trees and Codes
29 Write a program to implement Dijkstra’s Algorithm.
30 Write a program to implement Greedy algorithm using Task Scheduling Problem

COURSEPACK |
LESSON PLAN FOR THEORY COURSES (15 weeks * 3 Hours = 45 Classes)

LNo T/L Topics Skills Competency


T Introduction, Fundamentals of algorithm Designing Algorithms Designing algorithms,
(Line count, operation count) and checking the analyze their space and
complexity time complexities.
1
T Algorithm Design Techniques (Approaches,
Design Paradigms)
2
T Designing an algorithm and its Analysis (Best,
Worst & Average case)
3
L Write a program to sort given set of numbers in
ascending/descending order using Bubble sort and
4 also search a number using binary search.
L Write a program to sort given set of numbers in
ascending/descending order using Insertion sort
5 and also search a number using linear search.
T Asymptotic Notations (O, Ω, ʘ) based on Analyze the order of the
Orders of Growth, Asymptotic Notations growth of any algorithm
numerical
6
T Mathematical Induction Analysis
7
T Analysis-Mathematical analysis for Recursive
and Non-recursive algorithms Analyze the complexity
8 of any algorithm with
L Write a program to sort given set of numbers recurrence relation
in ascending/descending order using Quick
sort and any other sorting algorithm. Also
record the time taken by these two programs
and compare them.
9
L Write a program to sort given set of numbers
using Heap sort.
10
T Recurrence Relation - Substitution method,
11
T Recurrence Relation - Recursive method
12
T Recurrence Relation - Master's Theorem
13
L Write a program to sort given set of numbers
Counting Sort.
14
L Write a program to sort given set of numbers in Searching and sorting Analyze and apply
ascending/descending order using merge sort Algorithms searching and sorting
15 algorithms
T String matching approaches: Naive Analysis of Pattern Finding the optimal
16
Matching Approaches solution using different
T String matching approaches: Rabin Karp
17 approaches and analyze
T String matching approaches: KMP the problem
18
L Implement a Naive string-matching approach
19
L Implement Rabin Karp string-matching approach
20
COURSEPACK |
T Brute Force: Closest-pair and convex-hull Designing and using
21 Problems Brute Force methods
T Brute Force: Traveling Salesman Problem
22
T Brute Force: Knapsack Problem,
23
T Brute Force: Exhaustive Search, Assignment
24 problem.
L Write a program to implement Matrix Chain
25 Multiplication.
L Implement KMP string-matching approach
26
T Divide and conquer: Linear search, Binary search Designing and analysis of
27
divide and conquer methods
T Divide and conquer: Merge sort
28
T Divide and conquer: : Quick sort
29
T Divide and conquer: Heap sort
30
L Write a program to sort a given set of numbers
without comparing/swapping
31
L Write a program to sort a given set of numbers
using Maxhipify
32
T Divide and conquer: Strassen’s Matrix
Multiplication
33
T Greedy Technique: Container loading problem Designing and using greedy
34 methods
T Greedy Technique: Fractional Knapsack
35
L WAP to implement fractional knapsack problem
36
L WAP to implement Strassen’s Matrix
Multiplication
37
T Greedy Technique: Minimum spanning tree-
Prim’s algorithm
38
T Greedy Technique: Minimum spanning tree-
Kruskal's Algorithm
39
T Huffman Trees and Codes
40
L Write a program to implement minimum spanning
trees using Prims algorithm
41
L Write a program to implement Knapsack using
Greedy technique.
42
T Single Source Shortest Path: Dijkstra's Algorithm.
43
T Dynamic Programming: Principle of optimality, Finding the Optimal
0/1 Knapsack solution using dynamic
44 approach
T Coin-Exchange Problem
45
L Write a program to implement the Bellman-Ford
Algorithm.
46
L Compute the transitive closure of a given
directed graph using Warshall's algorithm. Write
a program to implement the shortest path
47 algorithm
COURSEPACK |
T Longest Common Subsequence Problem
48
T Travelling Salesman Problem
49
T Multi-stage graph
50
L Write a program to solve the LCS problem.
51
L Write a program to implement Knapsack using
the dynamic technique.
52
T Backtracking: n-Queens problem Analysis and applications
of backtracking method.
53
L Write a program to implement the n-Queen
Problem using backtracking.
54
L Write a program to implement coin -exchange
Problem
55
T Backtracking: Subset sum problem
56
T Backtracking: Graph Coloring
57
L Write a program to implement sum of subset
problem
58
L Write a program to implement graph coloring
technique
59
T Branch & Bound: Assignment Problem Analysis and applications
of Branch and Bound
60 method.
T Branch & Bound: Traveling Salesman Problem
(TSP)
61
L Obtain the Topological ordering of vertices in a
given digraph.
62
L Implement TCS using branch and bound method
63
T Analysis of different approaches
64
T Introduction to P, NP NP- Complete and NP Hard Finding the solution of Understand to solve
Problems. problems in polynomial problems in polynomial
65 time , nondeterministic time , nondeterministic
T Complete and NP-Hard Problems.
polynomial-time polynomial-time.
66
T Introduction to Approximation Algorithms.
Approximation Algorithms for NP-Hard Problems
67
T Traveling Salesman Problem, Knapsack problem
68
L Write a program to implement the Greedy
algorithm using Activity Selection Problem.
69

COURSEPACK |
L WAP to implement Huffman Trees and Codes
70
T Revision and doubt-clearing session
71
T Revision and doubt-clearing session
72
T Revision and doubt-clearing session
73
L Write a program to implement Dijkstra’s
Algorithm.
74
L Write a program to implement Greedy algorithm
using Task Scheduling Problem
75

T= Theory, L= Lab

BIBLIOGRAPHY

Text Book

1. Thomas H. Coreman, Charles E. Leiserson and Ronald L. Rivest, “Introduction to Algorithms”, The MIT
Press, 3rd edition, 2009.

Reference Books

1. Ellis Horowitz, Sartaj Sahni, Sanguthevar Rajasekaran. Fundamentals of Computer Algorithms, MIT Press,
Second Edition (Indian reprint: Prentice-Hall), 2008.
2. Aho, Hopcraft, Ullman, “The Design and Analysis of Computer Algorithms” Pearson Education.
Journals/Magazines/Govt.Reports/Gazatte/IndustryTrends
1. https://leetcode.com

SWAYAM/NPTEL/MOOCs Certification
1. Code Tantra
2. Coding Ninjas
3. Code Chef
4. https://onlinecourses.nptel.ac.in/noc19_cs47/preview (Swayam)
5. GeeksforGeeks

COURSEPACK |
PROBLEM-BASED LEARNING

Exercises in Problem-based Learning (Value Added Experiments)


SNo Problem KL
1 Write a program to implement Minimum Cost spanning tree. KL5
2 Write a program to implement Sum of subset problem. KL5
3 Write a program to implement Greedy algorithm using Task Scheduling Problem. KL5
4 Write a program to implement Greedy algorithm using Activity Selection Problem. KL5
5 Compute the transitive closure of a given directed graph using Warshall's algorithm. Write KL6
a program to implement shortest path algorithm.
6 Write a program to find all Hamiltonian Cycles in a connected undirected Graph G of n KL5
vertices using backtracking principle.

7 Develop a program to implement solve LCS problem. KL6


8 Develop a program to implement Huffman-code. KL6

9 Find Minimum Cost Spanning Tree of a given connected undirected graph using KL6
Kruskal's algorithm. Use Union-Find algorithms in your program.
10 Find Minimum Cost Spanning Tree of a given undirected graph using Prim’s algorithm. KL6

11 Design a program to (a) Implement All-Pairs Shortest Paths problem using Floyd's KL6
algorithm.
(b) Implement Travelling Sales Person problem using Dynamic programming.
12 Design and implement to find a subset of a given set S = {Sl, S2, .... , Sn} of n positive KL6
integers whose SUM is equal to a given positive integer d. For example, if S ={1, 2, 5, 6,
8} and d= 9, there are two solutions {1,2,6}and {1,8}. Display a suitable message, if the
given problem instance doesn't have a solution.
13 Transpose of Matrix KL5

14 Given an (n x m) matrix, rotate the matrix by 90 degrees in clockwise direction. KL6

15 Given an array arr[] of size N-1 with integers in the range of [1, N], the task is to find the KL6
missing number from the first N integers.

16 Given a string, the task is to count all palindrome sub string in a given string. Length of KL6
palindrome sub string is greater than or equal to 2.

17 Given a set of strings, find the longest common prefix. KL5

18 Given two strings, the task is to find if a string can be obtained by rotating another string KL6
by two places.
19 Given an expression string exp, write a program to examine whether the pairs and the KL5
orders of “{“, “}”, “(“, “)”, “[“, “]” are correct in the given expression.

20 Given a string, reverse it using stack. KL5

COURSEPACK |
21 Given an integer k and a queue of integers, The task is to reverse the order of the first k KL6
elements of the queue, leaving the other elements in the same relative order.

22 Given a singly linked list with N nodes and a number X. The task is to find the node at KL5
the given index (X)(1 based index) of linked list.

23 Given a Linked List and a number N, write a function that returns the value at the Nth KL5
node from the end of the Linked List.

24 Given a linked list, check if the linked list has a loop (cycle) or not. The below diagram KL6
shows a linked list with a loop.

25 Given two sorted arrays arr1[] and arr2[] of sizes n and m in non-decreasing order. Merge KL5
them in sorted order without using any extra space. Modify arr1 so that it contains the
first N elements and modify arr2 so that it contains the last M elements.

26 Given a string S of size N, the task is to sort the string without changing the position of KL5
vowels.

27 Given an array arr[] of size N and a number K, where K is smaller than the size of the KL5
array. Find the K’th smallest element in the given array. Given that all array elements are
distinct.

28 Given the arrival and departure times of all trains that reach a railway station, the task is KL6
to find the minimum number of platforms required for the railway station so that no train
waits. We are given two arrays that represent the arrival and departure times of trains that
stop.
29 Given two strings ‘str1’ and ‘str2’ of size m and n respectively. The task is to KL6
remove/delete and insert the minimum number of characters from/in str1 to transform it
into str2. It could be possible that the same character needs to be removed/deleted from
one point of str1 and inserted at some another point.
30 Given are N ropes of different lengths, the task is to connect these ropes into one rope KL6
with minimum cost, such that the cost to connect two ropes is equal to the sum of their
lengths.

31 Given a binary search tree, task is to find Kth largest element in the binary search tree. KL6

32 Given a weighted graph and a source vertex in the graph, find the shortest paths from the KL6
source to all the other vertices in the given graph.

COURSEPACK |
STUDENT-CENTERED LEARNING (Seff-Learning towards lifelong learning)

Self-Learning (it’s a typical course-based project to be carried out by a whole class in groups of four students each;
they should exhibit higher level BTLs)

The students, in a group, are expected to conceive an idea based on the content (objectives/outcomes) and apply the
suitable knowledge to demonstrate their learning.

A) COURSE-BASED PROJECT (Psychomotor skills)

To enhance their skill set in the integrated course, the students are advised to execute course-based design
projects. Some sample projects are given below:

S. No Suggested Projects KL
1 KL5
Comparing Kruskal and Prim’s algorithm in MST.

2 KL5
Greedy and Backtracking Algorithm Comparison in Graph Coloring Problem.

3 Build the game of Capsa Susun using Greedy Algorithm KL6

4 Solving Travelling Salesman Problem Using Greedy Algorithm and Brute Force KL3
Algorithm
5 KL6
Design and Analysis 0/1 Knapsack Problem.

6 Design Coin Change Problem using Brute Force and Greedy Algorithm KL6

7 Comparing Exhaustive Search Algorithm and Greedy Algorithm in job Scheduling KL5
Problem
8 Build a Cash Flow Minimiser KL6

9 KL6
Build a CB Mario game using Dynamic Programming Optimisation.

10 Build an application of Sudoku game using Backtracking method KL6

11 KL6
Build a Snakes & Ladders game, challenge the player to win in minimum number of
moves. You can use BFS to compute it.

12 KL6
Make an application like Google Maps - You can use Dijkshtra’s algorithm to find the
shortest paths, A* Search for more efficient & real time use.

13 KL6
Create a Binary Search Algorithm to Search for a Value with a Certain Precision

COURSEPACK |
14 KL6
Create Space Efficient Algorithm for Subset Sum

15 KL6
Design the game- Place eight queens on an 8 × 8 chessboard so that no queen attacks
another queen.

16 KL6
Build a game like SPACE- SHOOTER.

17 KL6
Make a PHONEBOOK using TRIE Data structure
18 KL3
Use a string compression algorithm, like run length encoding or Huffman coding
19 KL6
Build. Game like Flappy Bird.
20 KL6
Build a snake and Ladders game, challenge the player to win in minimum number of
moves. You can use BFS to compute it.

B) SELF-LEARNING THROUGH MOOCs (Cognitive Skills):


1. Code tantra
2. https://www.coursera.org/courses?query=algorithm%20design
3. https://www.geeksforgeeks.org/learn-data-structures-and-algorithms-dsa-tutorial/?ref=shm

COURSEPACK |

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy