📜  门| GATE 2017 MOCK II |第49章(1)

📅  最后修改于: 2023-12-03 15:28:36.408000             🧑  作者: Mango

门| GATE 2017 MOCK II |第49章

本文介绍了GATE 2017模拟测试II的第49章,其中包括了一些与计算机科学相关的问题。

背景

GATE(Graduate Aptitude Test in Engineering,工程研究生资格考试)是印度国家考试,用于测试学生的工程知识和技能。GATE成绩也被用来评估印度大学的学生,以及评估在印度研究和开发领域中的人才。

GATE 2017 MOCK II是一份模拟测试,包括了多个章节,本文主要介绍其中的第49章。

题目

本章包括了一些和计算机科学相关的问题,以下是其中的两个问题:

问题1

给定一个字符串和一个模式,找出字符串中是否存在与模式匹配的子串。

输入:

第一行包含一个整数N,表示字符串的长度。

第二行包含一个长度为N的字符串。

第三行包含一个长度为M的模式。

输出:

如果存在与模式匹配的子串,输出“YES”,否则输出“NO”。

示例:

输入:

12
hello world!
wor

输出:

YES
问题2

给定一个有向加权图,找到从起点到每个节点的最短路径。

输入:

第一行包含两个整数N和M,分别表示节点数和边数。

接下来M行每行包含三个整数u,v和w,表示从节点u到节点v有一条有向边,边的权重为w。

最后一行包含一个整数S表示起点。

输出:

对于每个节点i,输出从起点到i的最短路径。如果不存在从起点到i的路径,则输出“INF”。

示例:

输入:

5 6
1 2 2
1 3 4
2 3 1
2 4 7
3 4 3
4 5 1
1

输出:

0
2
3
6
7
解题思路
解题思路1

问题1可以使用字符串匹配算法解决,例如KMP算法或Boyer-Moore算法。在本文中,我们将使用Boyer-Moore算法。

解题思路2

问题2可以使用Dijkstra算法解决,该算法在加权图中用于查找从起点到每个节点的最短路径。在本文中,我们将使用Dijkstra算法。

代码实现
代码实现1

以下是使用Boyer-Moore算法解决问题1的Python代码:

def boyer_moore(text, pattern):
    n = len(text)
    m = len(pattern)

    if m == 0:
        return True
    if n == 0:
        return False
    if m > n:
        return False

    bad_char_table = {}
    for i in range(m):
        bad_char_table[pattern[i]] = i

    i = m - 1
    j = m - 1
    while i < n:
        if text[i] == pattern[j]:
            if j == 0:
                return True
            else:
                i -= 1
                j -= 1
        else:
            bad_char_index = bad_char_table.get(text[i], -1)
            i += m - min(j, 1 + bad_char_index)
            j = m - 1

    return False
代码实现2

以下是使用Dijkstra算法解决问题2的Python代码:

import heapq

def dijkstra(graph, start):
    dist = {}
    prev = {}

    for node in graph:
        dist[node] = float('inf')
        prev[node] = None

    dist[start] = 0

    heap = [(dist[start], start)]

    while heap:
        u = heapq.heappop(heap)[1]
        for v in graph[u]:
            alt = dist[u] + graph[u][v]
            if alt < dist[v]:
                dist[v] = alt
                prev[v] = u
                heapq.heappush(heap, (dist[v], v))

    return dist
结论

本文介绍了GATE 2017 MOCK II的第49章,其中包括了一些与计算机科学相关的问题。我们解决了其中的两个问题,分别使用了Boyer-Moore算法和Dijkstra算法。