前面的几篇文章学习实现了一下Floyd算法和Dijkstra算法,二者都是用于求解最短路径距离问题的经典算法,今天学习回顾的是Prim算法,这是在求解加权连通图的最小生成树问题中比较经典的算法了,于此齐名的还有一个算法Kruskal算法,之后的时间会学习和实现这个算法,今天的内容是Prim算法的学习,同样,关于Prim算法的原理我也不会长篇累赘,这里简单的概要一下Prim算法的核心思想:

算法的目的是为了解决加权连通图中最小生成树的寻找问题,对于一个给定的图,设置两个空的集合A、B,假设A用于存储原始图的最小生成树的顶点,最开始的时候A中只包含一个顶点,B中存放的是这个最小生成树的边边权值,最开始的B是空集,在图中寻找与A中顶点相连的最小边权值然后将另一端的顶点加入到A中,同时将边权值加入到集合B中去,直至遍历完全所有的顶点后算法终止

下面是算法的具体实现:

#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:使用Prim算法求加权连通图的最小生成树
'''import random
import timedef random_matrix_genetor(vex_num=10):'''随机图顶点矩阵生成器输入:顶点个数,即矩阵维数'''data_matrix=[]for i in range(vex_num):one_list=[]for j in range(vex_num):one_list.append(random.randint(1, 100))data_matrix.append(one_list)return data_matrixdef prim(data_matrix):'''prim 算法'''vex_num=len(data_matrix)prims=[]weights=[]flag_list=[False]*vex_numnode=0for i in range(vex_num):prims.append(0)weights.append(0)flag_list[node]=Truefor i in range(vex_num):weights[i]=data_matrix[node][i]for i in range(vex_num-1):min_value='N'for j in range(vex_num):if weights[j]!='N' and weights[j]<min_value and not flag_list[j]:min_value=weights[j]node=jif node==0:returnflag_list[node]=Truefor m in range(vex_num):if weights[m]>data_matrix[node][m] and not flag_list[m]:weights[m]=data_matrix[node][m]prims[m]=node return weights, primsdef main_test_func(vex_num=10):'''主测试函数'''start_time=time.time()data_matrix=random_matrix_genetor(vex_num)weights, prims=prim(data_matrix)print weightsprint primsend_time=time.time()return end_time-start_timeif __name__=='__main__':   data_matrix=random_matrix_genetor(10)weights, prims=prim(data_matrix)print weights  print primstime_list=[]print '----------------------------10顶点测试-------------------------------------'time10=main_test_func(10)time_list.append(time10)print '----------------------------50顶点测试-------------------------------------'time50=main_test_func(50)time_list.append(time50)print '----------------------------100顶点测试-------------------------------------'time100=main_test_func(100)time_list.append(time100)print '----------------------------1000顶点测试-------------------------------------'time1000=main_test_func(1000)time_list.append(time1000)print '---------------------------------时间消耗对比--------------------------------'for one_time in time_list:print one_time

结果如下:

[33, 11, 2, 6, 1, 1, 4, 30, 5, 19]
[0, 5, 4, 8, 0, 0, 4, 9, 4, 5]
----------------------------10顶点测试-------------------------------------
[44, 12, 3, 16, 10, 8, 16, 1, 6, 34]
[0, 2, 0, 6, 0, 3, 1, 2, 5, 7]
----------------------------50顶点测试-------------------------------------
[31, 4, 1, 1, 2, 3, 4, 4, 3, 3, 2, 4, 11, 2, 4, 4, 1, 1, 3, 3, 2, 1, 4, 1, 1, 9, 1, 2, 1, 6, 2, 3, 1, 2, 2, 1, 1, 1, 3, 1, 2, 5, 2, 1, 6, 5, 1, 1, 4, 2]
[0, 28, 29, 0, 0, 1, 45, 20, 26, 40, 45, 0, 31, 15, 42, 28, 35, 11, 36, 28, 14, 42, 14, 13, 10, 35, 9, 32, 39, 0, 17, 43, 23, 45, 14, 26, 13, 34, 39, 47, 4, 16, 40, 36, 37, 13, 40, 21, 37, 26]
----------------------------100顶点测试-------------------------------------
[36, 3, 2, 1, 2, 1, 2, 2, 3, 1, 1, 1, 2, 1, 3, 1, 3, 3, 1, 3, 3, 1, 1, 1, 2, 1, 4, 2, 1, 1, 1, 1, 5, 3, 1, 2, 2, 3, 1, 2, 2, 3, 3, 1, 3, 1, 1, 3, 4, 3, 1, 2, 2, 2, 1, 4, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 2, 2, 2, 1]
[0, 74, 30, 70, 96, 61, 13, 60, 58, 34, 18, 82, 7, 28, 20, 7, 63, 43, 72, 56, 46, 0, 36, 0, 98, 78, 97, 25, 89, 85, 11, 17, 9, 31, 21, 51, 40, 62, 78, 68, 88, 58, 70, 63, 93, 59, 13, 19, 77, 80, 6, 21, 60, 0, 88, 84, 77, 21, 13, 46, 65, 35, 4, 78, 68, 34, 52, 93, 75, 79, 9, 27, 43, 6, 65, 6, 82, 1, 95, 3, 64, 86, 13, 18, 53, 2, 88, 38, 74, 74, 72, 68, 58, 38, 89, 12, 15, 38, 90, 83]
----------------------------1000顶点测试-------------------------------------
[16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 105, 45, 111, 93, 29, 31, 279, 45, 188, 276, 55, 198, 107, 42, 20, 136, 101, 72, 107, 163, 143, 297, 45, 177, 86, 5, 122, 31, 129, 122, 8, 144, 308, 370, 61, 68, 21, 150, 23, 1, 37, 131, 320, 91, 0, 105, 107, 90, 177, 603, 175, 198, 119, 375, 62, 149, 84, 121, 48, 135, 2, 72, 51, 13, 0, 65, 64, 25, 72, 132, 91, 67, 121, 132, 99, 127, 59, 73, 28, 29, 140, 37, 15, 1, 364, 75, 295, 218, 146, 91, 75, 71, 29, 105, 176, 328, 39, 55, 46, 151, 68, 3, 61, 95, 66, 234, 86, 44, 127, 25, 91, 32, 63, 27, 9, 141, 66, 83, 1, 246, 141, 101, 108, 181, 95, 29, 141, 98, 135, 2, 129, 61, 214, 184, 17, 61, 111, 52, 28, 91, 62, 212, 27, 59, 198, 66, 53, 254, 195, 45, 1, 83, 2, 59, 164, 137, 5, 83, 99, 53, 151, 45, 0, 4, 158, 55, 248, 109, 164, 81, 6, 360, 90, 147, 73, 86, 129, 484, 40, 33, 136, 382, 142, 65, 51, 101, 41, 5, 17, 177, 409, 194, 112, 45, 71, 99, 122, 23, 29, 69, 366, 29, 46, 72, 73, 153, 31, 72, 53, 47, 13, 19, 25, 135, 11, 147, 19, 65, 202, 31, 28, 102, 156, 171, 115, 61, 86, 253, 122, 140, 261, 119, 19, 157, 27, 84, 126, 15, 23, 112, 250, 28, 61, 101, 175, 3, 128, 28, 4, 119, 61, 175, 53, 146, 23, 157, 169, 39, 75, 546, 136, 42, 157, 45, 68, 193, 90, 35, 65, 129, 227, 6, 16, 155, 51, 440, 517, 23, 219, 22, 297, 48, 16, 103, 77, 211, 101, 82, 62, 107, 293, 28, 84, 132, 66, 27, 206, 0, 19, 136, 242, 28, 469, 142, 15, 77, 46, 139, 238, 76, 231, 77, 269, 116, 123, 66, 154, 147, 123, 118, 79, 18, 126, 245, 164, 14, 68, 31, 17, 23, 215, 112, 163, 92, 31, 72, 299, 93, 379, 134, 152, 67, 121, 62, 181, 110, 6, 493, 102, 236, 79, 65, 113, 63, 46, 0, 8, 447, 160, 122, 63, 164, 127, 59, 19, 8, 0, 77, 13, 58, 91, 160, 230, 130, 137, 113, 327, 13, 47, 105, 80, 58, 122, 375, 130, 29, 135, 65, 30, 320, 121, 169, 39, 52, 31, 316, 44, 160, 66, 126, 57, 122, 45, 28, 45, 281, 264, 525, 377, 79, 28, 214, 25, 17, 136, 367, 63, 84, 65, 84, 52, 114, 147, 65, 0, 6, 101, 56, 238, 94, 129, 169, 139, 274, 77, 6, 57, 325, 75, 242, 68, 101, 205, 254, 133, 99, 220, 200, 0, 150, 42, 107, 81, 367, 151, 79, 137, 8, 372, 232, 99, 4, 253, 272, 57, 106, 91, 131, 30, 4, 49, 250, 25, 36, 25, 35, 194, 105, 176, 102, 131, 151, 72, 129, 282, 48, 144, 55, 221, 127, 26, 128, 103, 12, 304, 90, 171, 58, 3, 40, 104, 99, 135, 98, 138, 174, 101, 118, 143, 44, 55, 132, 57, 8, 250, 157, 45, 79, 188, 141, 40, 42, 79, 40, 99, 161, 110, 66, 79, 93, 37, 98, 176, 130, 99, 177, 23, 95, 35, 108, 39, 453, 93, 4, 190, 42, 55, 261, 90, 93, 68, 8, 122, 402, 243, 208, 97, 146, 174, 91, 250, 124, 49, 66, 58, 115, 170, 283, 36, 24, 39, 343, 47, 276, 123, 2, 5, 53, 352, 151, 66, 173, 112, 378, 98, 51, 35, 36, 72, 64, 71, 304, 164, 62, 134, 57, 204, 24, 284, 151, 259, 82, 175, 28, 39, 73, 71, 61, 130, 232, 250, 262, 142, 65, 28, 77, 114, 112, 12, 6, 79, 258, 199, 65, 74, 150, 110, 14, 99, 163, 299, 69, 14, 36, 273, 17, 2, 39, 45, 36, 128, 0, 156, 64, 175, 140, 127, 39, 232, 317, 38, 37, 25, 6, 53, 90, 244, 86, 366, 91, 95, 114, 147, 132, 6, 256, 97, 52, 20, 151, 88, 65, 26, 141, 32, 114, 58, 37, 41, 92, 161, 111, 26, 23, 97, 8, 89, 169, 31, 2, 65, 361, 15, 163, 21, 86, 210, 117, 94, 164, 186, 150, 143, 68, 352, 131, 69, 119, 59, 148, 131, 16, 25, 61, 118, 84, 29, 82, 46, 71, 40, 84, 237, 121, 28, 158, 103, 29, 79, 48, 61, 141, 202, 189, 39, 135, 45, 140, 182, 153, 309, 194, 104, 35, 75, 2, 68, 67, 216, 232, 45, 108, 209, 101, 8, 219, 45, 95, 91, 62, 307, 135, 196, 128, 254, 545, 104, 14, 15, 217, 245, 23, 71, 44, 4, 4, 164, 48, 90, 46, 110, 98, 107, 164, 188, 163, 101, 117, 122, 84, 308, 84, 26, 61, 84, 2, 84, 108, 99, 91, 23, 249, 15, 9, 84, 103, 40, 122, 67, 81, 113, 66, 6, 99, 0, 23, 159, 68, 423, 115, 86, 108, 44, 95, 131, 143, 141, 44, 217, 357, 127, 130, 138, 100, 223, 69, 37, 232, 84, 0, 123, 108, 130, 46, 36, 23, 116, 145, 111, 316, 91, 37, 1, 308, 102, 116, 89, 60, 45, 230, 99, 166, 129, 129, 105, 92, 2, 5, 79, 155, 159, 123, 135, 48, 1, 61, 107, 59, 177, 146, 159, 36, 18, 83, 69, 20, 349, 30, 344, 99, 131, 5, 266, 185, 86, 152, 35, 26, 163, 102, 35, 19, 48, 151, 166, 210, 63, 111, 557, 169, 53, 90, 70, 47, 179, 127, 112, 119, 193, 313, 35, 23, 215, 128, 208, 28, 31, 41, 53, 84, 75, 91, 20, 0, 6, 168, 150, 39, 268, 143, 147, 4, 44, 312, 16, 28, 8, 6, 100, 98, 89, 170, 3, 36, 205, 214, 13, 237, 730, 16, 155, 121, 25, 105, 78, 507, 125, 65, 86, 99, 94, 20, 44, 103, 71, 114, 114, 31, 158, 103, 75, 15, 91, 80, 47, 177, 32, 132, 98, 118, 97, 66, 163, 104, 23, 97, 138, 61, 62]
---------------------------------时间消耗对比--------------------------------
0.0
0.00399994850159
0.0169999599457
1.55599999428

结果可以看出:

时间消耗还是很低的,在大规模图中Prim算法也是很理想的。

好了,关于Prim就说这么多了,如有问题欢迎讨论!

python实现Prim算法求解加权连通图的最小生成树问题相关推荐

  1. 数据结构与算法-Prim算法解析与解决修路最小生成树问题

    文章目录 简介 Prim算法 最小生成树 应用场景 问题描述 思路分析 代码实现 简介 Prim算法 ​ 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索 ...

  2. em算法python代码_EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

  3. 三十七、Prim算法--求解最小生成树

    一.Prim算法介绍 普利姆(Prim)算法求最小生成树,也就是在包含 n 个顶点的连通图中,找出只有(n-1)条边包含所有 n 个顶点的 连通子图,也就是所谓的极小连通子图 普利姆的算法如下: 设 ...

  4. Python使用秦九韶算法求解多项式的值

    ----------喜大普奔---------- 1.董付国老师Python系列教材,亚马逊.京东.当当.天猫均有销售: 1)<Python程序设计(第2版)>(2018年5月第6次印刷) ...

  5. 并查集-算法详解及例题(最小生成树问题)

    一.并查集的概念: 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图.求最小生成树的 Kruskal 算法和求 ...

  6. 详解Python使用模拟退火算法求解列表“最大值”

    模拟退火算法可以看作是爬山算法的一种改进,如果前方有更优解就前进,如果没有更优解就以一定概率前进.与简单的爬山算法相比,模拟退火算法有可能跳出局部而得到全局最优解,但也有可能得到更差的解,算法参数的设 ...

  7. Prim算法(JAVA实现-邻接矩阵)

    简介 最小生成树介绍 Prim 算法本质就是就是求最小生成树问题, 最小生成树(Minimum Cost Spanning Tree),简称MST. 给定一个带权的无向连通图,如何选取一棵生成树,使树 ...

  8. 最小生成树--Prim算法

    目录 适用场景: 问题描述 Prim算法的实现原理: 实现代码C++: 适用场景: 朴素版的Prim算法主要是应用于最小生成树问题中稠密图的情形,解决求连通图中将所有边连通起来时需要的最短距离问题,具 ...

  9. Prim算法(matlab实现)

    Prim算法 Prim算法主要用来解决最小生成树问题 Prim算法是一种贪心算法,从起始顶点出发,每次迭代选择当前可用的最小权值边. 例      用Prim算法求下图的最小生成树. 用result3 ...

  10. 最小生成树——Prim算法

    目录 基本思想 实现 伪代码 实际问题求解 最小生成树:带权连通图的生成树中 边的权值之和最小的那个生成树. 最小生成树不是唯一的.当图中的各边权值互不相等时,最小生成树是唯一的: 若无向连通图本身是 ...

最新文章

  1. 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环...
  2. Python的函数名作为参数传入调用以及map、reduce、filter
  3. asp.net mvc5 分析器错误消息: 未能加载类型“XXX.MvcApplication”
  4. Visio 2010,如何打开多个窗口
  5. 9.LDA(线性判别分析)
  6. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)
  7. Knative Service 是如何指定端口和协议的
  8. linux sysstat rpm包下载,[20141201]SYSSTAT软件包.txt
  9. ae2021最新遮罩路径图形扭曲插件:BAO Boa for Mac
  10. win7重装系统时,使用PE工具箱进入系统看到的“C盘变成0.2G,D盘变成48G左右”这是什么回事?...
  11. socket编程持续交流java_socket编程的简单问题
  12. linux awk 脚本格式,偷偷学习shell脚本之awk编辑器
  13. qq互联android sdk,qq互联.Android_SDK_V2.0使用说明.doc
  14. React Hook介绍(二):Effect Hook
  15. 解决报错“RuntimeError - [Xcodeproj] Unknown object version.”
  16. 如何将macbook触摸板和外接鼠标的滚轮设置相反方向
  17. mysql-8.0.19-winx64安装过程
  18. 跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效
  19. 手机端搜狗输入法语音转文字的体验报告
  20. 1521端口已被占用解决方案

热门文章

  1. Python类、模块、包的区别
  2. 【欧洲AI复兴】马克龙:法国AI要赶美超中!
  3. 有些东西需要深刻理解概念才行
  4. 统计Linux服务器连接数
  5. 第二次项目冲刺(Beta阶段)--第五天
  6. 用jmap和jps查看对象数量
  7. 带你快速玩转canvas——写个折线图
  8. hibernate 中的一级缓存 二级缓存
  9. JMP比较组均值,检查差异
  10. MSSQL 同步两个数据库的示例