博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【京东-深圳】文本文件的频繁插入
阅读量:5165 次
发布时间:2019-06-13

本文共 815 字,大约阅读时间需要 2 分钟。

这道题是京东电话面试给出的,大致意思是:

对于一个文本文件,需要频繁地在它的给定的位置插入新的串,问如何快速地进行插入,并将新的文本信息持久化保存。

 

算法:对于原始文本只进行一次读取,将每次插入的偏移量信息(相对于原始文本的头指针的offset)以及文本信息保存到新的文件里。

文本恢复通过加载原始文本以及插入的文本偏移量信息来恢复。这样工作量文本的恢复上,恢复过程免去了频繁的移位操作。

 

文本的恢复过程:

1. 加载插入文本偏移量信息,可以使用map<int, string>的结构用来存储偏移量和文本信息。由于map本身的性质,遍历map信息时,

偏移量是顺序排列的。

2. 原始文本的过程中,结合map信息,进行恢复。每次读取的字节数与插入的map的key值相关,进行插入操作之后,继续偏移。

 

【发散】若不但有插入,还有删除操作呢? 插入给出的信息是 相对于原始文本头指针的偏移量和待插入文本信息,删除时给出的是相对于原始文本头指针的删除位置和删除字节数。

 新建一个文本,用来存储以下信息:

偏移量 插入操作  插入内容(针对插入操作)

偏移量 删除操作  删除字节(针对删除操作)

可以使用map<int, Operate>来存储插入/删除的信息,int是原始文本头指针的偏移量。其中,Operate的结构如下:

enum eType = {Insert = 0, Del = 1};typedef struct Operate{    enum    eType;      //操作类型:插入、删除    int     iByte;      //待删除字节数    string  strText;    //待插入文本内容}Operate;

 

主要工作还是在文本的恢复。

这是一种很好的外部存储的思路,可以借鉴。

转载于:https://www.cnblogs.com/gardonkoo/p/7424022.html

你可能感兴趣的文章
64位主机64位oracle下装32位客户端ODAC(NFPACS版)
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
OO学习总结与体会
查看>>
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>