[C++] [算法] KMP算法

在虚拟机上测评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间。 因为是虚拟机上的测评,所以时间只做参考,不要太较真, 看看就好了。
MySQL 工具:
    1. 自带mysqlimport工具。
    2. 命令行 load data infile ...
    3. 利用mysql-connector-python Driver来写的脚本。
 PostgreSQL 工具:
    1. pgloader 第三方工具。
    2. 命令行 copy ... from ...
    3. 利用psycopg2写的python 脚本。
测试表结构:

mysql> desc t1;
+----------+-----------+------+-----+-------------------+-------+
| Field    | Type      | Null | Key | Default           | Extra |
+----------+-----------+------+-----+-------------------+-------+
| id       | int(11)   | NO   | PRI | NULL              |       |
| rank     | int(11)   | NO   |     | NULL              |       |
| log_time | timestamp | YES  |     | CURRENT_TIMESTAMP |       |
+----------+-----------+------+-----+-------------------+-------+
3 rows in set (0.00 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (6.80 sec)

测试CSV文件:
t1.csv

MySQL 自身的loader: (时间24妙)

mysql> load data infile ‘/tmp/t1.csv‘ into table t1 fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\r\n‘;
Query OK, 1000000 rows affected (24.21 sec)
Records: 1000000  Deleted: 0  Skipped: 0  Warnings: 0

MySQL python 脚本:(时间23秒)
>>> 
Running 23.289 Seconds

MySQL 自带mysqlimport:(时间23秒)

[[email protected] ~]# time mysqlimport t_girl ‘/tmp/t1.csv‘ --fields-terminated-by=‘,‘ --fields-enclosed-by=‘"‘ --lines-terminated-by=‘\r\n‘ --use-threads=2 -uroot -proot
t_girl.t1: Records: 1000000  Deleted: 0  Skipped: 0  Warnings: 0

real    0m23.664s
user    0m0.016s
sys     0m0.037s

PostgreSQL 自身COPY:(时间7秒)

t_girl=# copy t1 from ‘/tmp/t1.csv‘ with delimiter ‘,‘;
COPY 1000000
Time: 7700.332 ms

Psycopg2 驱动copy_to方法:(时间6秒)

[[email protected] scripts]# python load_data.py
Running 5.969 Seconds.

Pgloader 导入CSV:(时间33秒)

[[email protected] ytt]# pgloader commands.load
                    table name       read   imported     errors            time

                        ytt.t1    1000000    1000000          0         33.514s
------------------------------  ---------  ---------  ---------  --------------
------------------------------  ---------  ---------  ---------  --------------
             Total import time    1000000    1000000          0         33.514s

Pgloader 直接从MySQL 拉数据:(时间51秒)

[[email protected] ytt]# pgloader commands.mysql
                    table name       read   imported     errors            time

               fetch meta data          2          2          0          0.138s
------------------------------  ---------  ---------  ---------  --------------
                            t1    1000000    1000000          0         51.136s
------------------------------  ---------  ---------  ---------  --------------
------------------------------  ---------  ---------  ---------  --------------
------------------------------  ---------  ---------  ---------  --------------
             Total import time    1000000    1000000          0         51.274s

附上commands.load和commands.mysql

commands.load:
LOAD CSV
   FROM ‘/tmp/ytt.csv‘ WITH ENCODING UTF-8
        (
           id, rank, log_time
        )
   INTO postgresql://t_girl:[email protected]:5432/t_girl?ytt.t1
   WITH skip header = 0,
        fields optionally enclosed by ‘"‘,
        fields escaped by backslash-quote,
        fields terminated by ‘,‘  

    SET work_mem to ‘32 MB‘, maintenance_work_mem to ‘64 MB‘; 

commands.mysql:
LOAD DATABASE
     FROM mysql://python_user:[email protected]:3306/t_girl?t1
     INTO postgresql://t_girl:[email protected]:5432/t_girl?ytt.t1

 with data only

  SET maintenance_work_mem to ‘64MB‘,
      work_mem to ‘3MB‘,
      search_path to ‘ytt‘;

附pgloader 手册:
http://pgloader.io/howto/pgloader.1.html

[C++] [算法] KMP算法

时间: 2024-12-06 14:31:36

[C++] [算法] KMP算法的相关文章

菜鸟学算法-KMP算法

一. KMP算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,简称KMP算法.KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息. 二. KMP算法的意义 先举一个简单模式匹配的例子,给定字符串T=“abababca”,S=“bacbababaabcbab”,判断T是否是S的子串,如果用暴力扫描的话,就是拿着T字符串从

算法 - KMP算法

1 解决问题 从一个字符串中查找子串,如果存在返回字串在字符串中的位置. 示例: 字符串(T):"BBC ABCDAB ABCDABCDABDE" 子串( P):"ABCDABD" 通过算法查找字串P在字符串T中的位置为15(从0开始). 2 暴力算法 思路: 循环T,从T的每个字符开始子字串P匹配. 代码: int strstr(char iTarget[], int iTLen, char iPattern[], int iPLen) { for (int i

我也学算法 - KMP算法

一直以来,对算法都是理论大于实际,甚至没有实际. 最近由于项目需要.从新了解了一下KMP算法.唉,讨厌这种被动的学习过程. 不过KMP算法还是很有意思的,用了两天的时间才总算是弄懂了.期间参考了网上的博文和数据结构.下面分享一下KMP算法的心得. KMP的总体思想是利用模式串本身的特性来优化匹配的步骤.如何利用自身的特性呢,KMP借助一个数组来实现,也就是大多数教程中提到的next数组.后面我会介绍next数组是如何构建和使用的. 前面提到KMP算法需要模式串满足一定的条件,那么这个条件是什么呢

算法 KMP算法 参考:http://blog.csdn.net/hackbuteer1/article/details/7319115

KMP算法详解: KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字.其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n). 在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀. 对于next[]数组的定义如下: 1) next[

左神讲解基础算法--kmp算法

主要解决问题:包含问题. 例如: str1: abc123def str2:123d str1中是否包含有str2这个字串.(注意字串与子序列区别) 子序列:可以连续也可以不连续 子数组/子串:必须是连续的. 好了废话不多说了,我们上正菜.首先,想了解kmp的加速过程,要先知道一个数组叫next数组,这个数组中存放了str2中每个字符的前缀和后缀相匹配的最长长度(注意是前缀和后缀的最长的那个匹配长度).什么意思呢?举例说下: 图中str2中下标为0的字符它的前缀和后缀长度都是0,(记住前缀和后缀

KMP算法总结

KMP 窗外的麻雀,在电线杆上多嘴~~ ta说这一句,很有寒假的感觉~ 首先 #define ls 母串长度 #define lt 子串长度 在这寒假即将到来之际(2017.1.14),我们学习了KMP算法 KMP算法,异常nb的字串匹配算法 关于字串匹配,我们最开始都是(ls*lt)的暴力 *超时稳稳的 具体就是枚举每个起点,然后起点往后推lt长度来比较是否一样 实在是太慢了 所以,人们开发了KMP算法 KMP是怎么来弄的时间复杂度的呢? 不急,一步一步慢慢讲(记录子串靠后的元素的部分前缀在在

KMP算法(一)

现在我先把没有优化的算法写出了,稍后再琢磨琢磨优化算法 KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一只河蟹,于是河蟹就向小Hi和小Ho提出了那个经典的问题:"小Hi和小Ho,你们能不能够判断一段文字(原串)里面是不是存在那么一些--特殊--的文字(模式串)?" 小Hi和小Ho仔细思考了一下,觉得只能想

KMP算法深度解析

[原文参考] http://www.ics.uci.edu/~eppstein/161/960227.html 摘要:KMP算法是字符串匹配的经典算法,由于其O(m+n)的时间复杂度,至今仍被广泛应用.大道至简,KMP算法非常简洁,然而,其内部却蕴含着玄妙的理论,以至许多人知其然而不知其所以然.本文旨在解开KMP算法的内部玄妙所在,希望能够有助于学习与理解. 1.KMP算法    一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为KMP算

串的匹配:朴素匹配&KMP算法

引言 字符串的模式匹配是一种经常使用的操作. 模式匹配(pattern matching),简单讲就是在文本(text,或者说母串str)中寻找一给定的模式(pattern).通常文本都非常大.而模式则比較短小.典型的样例如文本编辑和DNA分析. 在进行文本编辑时,文本一般是一段话或一篇文章,而模式则经常是一个单词.若是对某个指定单词进行替换操作,则要在整篇文章中进行匹配,效率要求肯定是非常高的. 模式匹配的朴素算法 最简单也最easy想到的是朴素匹配.何为朴素匹配,简单讲就是把模式串跟母串从左