📅  最后修改于: 2023-12-03 15:28:36.408000             🧑  作者: Mango
本文介绍了GATE 2017模拟测试II的第49章,其中包括了一些与计算机科学相关的问题。
GATE(Graduate Aptitude Test in Engineering,工程研究生资格考试)是印度国家考试,用于测试学生的工程知识和技能。GATE成绩也被用来评估印度大学的学生,以及评估在印度研究和开发领域中的人才。
GATE 2017 MOCK II是一份模拟测试,包括了多个章节,本文主要介绍其中的第49章。
本章包括了一些和计算机科学相关的问题,以下是其中的两个问题:
给定一个字符串和一个模式,找出字符串中是否存在与模式匹配的子串。
输入:
第一行包含一个整数N,表示字符串的长度。
第二行包含一个长度为N的字符串。
第三行包含一个长度为M的模式。
输出:
如果存在与模式匹配的子串,输出“YES”,否则输出“NO”。
示例:
输入:
12
hello world!
wor
输出:
YES
给定一个有向加权图,找到从起点到每个节点的最短路径。
输入:
第一行包含两个整数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可以使用字符串匹配算法解决,例如KMP算法或Boyer-Moore算法。在本文中,我们将使用Boyer-Moore算法。
问题2可以使用Dijkstra算法解决,该算法在加权图中用于查找从起点到每个节点的最短路径。在本文中,我们将使用Dijkstra算法。
以下是使用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
以下是使用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算法。