avatar
w520 价格多少合适?# Hardware - 计算机硬件
R*e
1
实现一个 text editor, 选用合适的数据结构,和 解释各种功能怎样实现。
估计占用的内存空间
thanks
avatar
A*2
2
rt,8岁的小女孩应该送什么礼物比较好?
或者说哪里有卖比较新颖的学习用品啊?想给我妈同事的女儿带一点礼物回去,
谢谢!
avatar
z*6
3
德州天气热买不到桃树和枣树想自己育苗,不知道能不能成功啊?
avatar
b*4
4
收费的也可以,免费更好,谢谢大家。
avatar
a*w
5
配置如下
Lenovo w520 in excellent condition.
Specs:
15.6-inch, 1920 x 1080 matte screen
2.5-GHz quad-core Intel 2nd Gen Core i7-2920XM CPU
Nvidia Quadro 2000M graphics card with Optimus graphics switching
8GB of RAM
500GB 7,200-rpm hard drive
$750 obo?
avatar
y*e
6
这个我以前写过一个notepad,大概解释一下数据结构吧。
我用的是C#写的(C#的string跟Java的string一样,是immutable的)。
这个数据结构应该支持如下功能:
1、快速的string读取,写入,以及删除
2、快速的获得某一个字符所在的行列号
3、支持较多的redo、undo
对于第一点要求,传统的string肯定不行,因为每次对string的修改都会产生一个新的
string。StringBuilder也不行,虽然它支持O(1)的Append,但是对于插入和删除最快
的还是O(N)。
考虑到第二点要求,可以用一个改进版的StringBuilder。即,每一行用一个
StringBuilder,然后行与行之间用LinkedList串联起来。这样做是假设每一行字符的
长度不会太长(大概百来个的字符删除O(N)还是很快的),然后行数也不会太长,因为
我们用的LinkedList把行数串联起来,要获得某一行的行号,也是O(N)的操作。
这就是第一版的数据结构,用它就可以实现一个简单的text editor,支持编辑不是很大
的文本文档。
这个数据结构可以改进的。我读了一些开源的editor的实现,大多数用到了如下的一个
很简单,但是非常有效率的实现:
考虑到对于一般的editor,用户要么只是打开文档进行浏览(移动鼠标不算对文档进行
修改),要么是只能在一个地方进行修改(这个是重点!)。也即,我们假设不会有多
个用户对一个文档进行同时的修改。那么实际上只是需要一个buffer就可以了。
所以这个editor其实都有2种模式,一种是阅读模式,一种是修改模式。用户会在这2个
模式之间相互却换。
这个数据结构跟第一版有点类似,把所有的行存在一个Array里面。每一行是一个字符
数组。有一个buffer,设定为初始80大小的字符Array(这个初始大小随便)。
当用户在某个位置开始删除字符的时候,直接把Array里面的对应的那个字符清空,不要
移动后面的字符。也即,HelloWorld,用户删除W之后,存在Array里面的是Hello-orld
。我这里用-来表示W这个字符被删除了。
当用户在某个位置开始插入字符的时候,把新的字符朝buffer里面写。当buffer满,或者
用户结束修改模式的时候,把buffer里面的字符插入Array里面(这里是一个O(N)的操作
,因为要把Array的字符后移)。比如,HelloWorld,用户欲插入the三个字符,在修改模
式下,the是写入buffer。当修改模式结束的时候,the就被插入到了Hello和World之间。
这个数据结构也是假设每一行的长度不会太长。所以O(N)的插入操作是可以接受的。
好了,终极方案,PieceTable,这个数据结构也是MS Word, VS,OpenOffice所使用的。
它支持无限次的redo, undo,对行的长度没有限制。
它用的是一个不同的思路。前面两个数据结构走过来,用的都是一个同样的原理:长的
string不好修改,我就把它砍成几小段,然后每一个小段里面的O(N)操作是可以接受的。这
个PieceTable的思路是,我把string视为一个数据库表存储的数据,然后在上面建立index,
以方面读写。
PieceTable内部分2个存储区域和一个索引区域。第一个区域是只读的,当editor载入新的
文档,文档内容会被保存在这个区域,而且是只读的。第二个区域是一个expandable的数
据结构,用来存储每一次用户插入的字符串。(当用户把光标移到一个位置,开始敲打键盘
输入字符,一直到用户结束修改模式,这算一次插入)。
存储区域的string总是expandable的,里面的字符不会被删除。
假设原本文档是HelloWorld,然后用户在第3位插入了the,那么保存的string会是
HelloWorldthe,在索引区域,产生的PieceTable是 [0-3] ~ [11-13] ~ [4-10]
(Hel the loWorld)
用户的每一次插入操作都会产生一个Piece。用户的一次删除操作就会把一个Piece分裂成2
个Piece。
对于示例HelloWorldthe,PieceTable是 [0-3] ~ [11-13] ~ [4-10]。假设用户删除
了W这个字符,那么PieceTable就变成了 [0-3] ~ [11-13] ~ [4-4] ~ [6-14]。
Piece之间的相对位置是存储在一个索引数据结构里面。对于Piece不多的文档,可以简单的
用LinkedList来做。若是Piece的数量大到一个规模(比如10K左右),就得用Tree了。
当Piece多到一定程度的时候,要进行Merge的操作了,用于降低Piece的数量。而Piece的数
量是和用户的操作数量直接相互关联的。
嗯,大概就解释到这么多了。有兴趣的筒子可以看一些开源editor的源码,比如VIM, Scintilla,
SharpStudio等等。

【在 R**e 的大作中提到】
: 实现一个 text editor, 选用合适的数据结构,和 解释各种功能怎样实现。
: 估计占用的内存空间
: thanks

avatar
w*m
7
学习用品好像国内的比较漂亮。
你妈同事的女儿,带糖不就好了吗?
avatar
S*p
8
me

★ 发自iPhone App: ChineseWeb 7.8

【在 z***6 的大作中提到】
: 德州天气热买不到桃树和枣树想自己育苗,不知道能不能成功啊?
avatar
M*t
9
navigon
avatar
G*Y
10
lenovo的现在的键盘这么坑跌呀
那么大的机器,那么小的键盘,page down的位置很怪呀

【在 a******w 的大作中提到】
: 配置如下
: Lenovo w520 in excellent condition.
: Specs:
: 15.6-inch, 1920 x 1080 matte screen
: 2.5-GHz quad-core Intel 2nd Gen Core i7-2920XM CPU
: Nvidia Quadro 2000M graphics card with Optimus graphics switching
: 8GB of RAM
: 500GB 7,200-rpm hard drive
: $750 obo?

avatar
d*e
11
不错不错

(N

【在 y*********e 的大作中提到】
: 这个我以前写过一个notepad,大概解释一下数据结构吧。
: 我用的是C#写的(C#的string跟Java的string一样,是immutable的)。
: 这个数据结构应该支持如下功能:
: 1、快速的string读取,写入,以及删除
: 2、快速的获得某一个字符所在的行列号
: 3、支持较多的redo、undo
: 对于第一点要求,传统的string肯定不行,因为每次对string的修改都会产生一个新的
: string。StringBuilder也不行,虽然它支持O(1)的Append,但是对于插入和删除最快
: 的还是O(N)。
: 考虑到第二点要求,可以用一个改进版的StringBuilder。即,每一行用一个

avatar
z*6
12
高人请问桃核很硬这么发芽快啊,还有是放家里育苗吗?

【在 S*p 的大作中提到】
: me
:
: ★ 发自iPhone App: ChineseWeb 7.8

avatar
c*n
13
tomtom
avatar
R*e
14
great! thank you!

【在 y*********e 的大作中提到】
: 这个我以前写过一个notepad,大概解释一下数据结构吧。
: 我用的是C#写的(C#的string跟Java的string一样,是immutable的)。
: 这个数据结构应该支持如下功能:
: 1、快速的string读取,写入,以及删除
: 2、快速的获得某一个字符所在的行列号
: 3、支持较多的redo、undo
: 对于第一点要求,传统的string肯定不行,因为每次对string的修改都会产生一个新的
: string。StringBuilder也不行,虽然它支持O(1)的Append,但是对于插入和删除最快
: 的还是O(N)。
: 考虑到第二点要求,可以用一个改进版的StringBuilder。即,每一行用一个

avatar
m*e
15
Texas本地产的大黄桃比较好种,多产.每年冬天春天到处都是苗卖。今年已经晚了。
avatar
b*4
16
两款都不便宜,娜款更好一些啊?
avatar
y*e
17
对于一般的编辑器,用第二种数据结构就足够了。PieceTable的实现太复
杂了,corner case特别多,特容易出bug。
我当初写的notepad也只是用Spanning Buffer做的。曾尝试写过一个
PieceTable类,但结果bug太多最后作罢。
建议读这本书:Dissecting A C# Application。
当初C#才出来的时候,有票人特喜欢C#简介的语言风格,但是痛恶M$收费
的Visual Studio,于是乎就他们动手写了一个开源的版本,功能几乎可
以跟VisualStudio相比肩。
随后他们就写了一本书。书名中的C# Application就是他们做的开源的
IDE,叫做SharpDevelop。现在Mono的MonoDevelop就是基于
SharpDevelop的。书里面详细的介绍了如何写一个Visual Studio规模
的IDE,也对PieceTable数据结构做了详细的解释。
主页是http://www.icsharpcode.net/opensource/sd/
在主页上可以免费下载书的电子PDF版本。

【在 R**e 的大作中提到】
: great! thank you!
avatar
k*e
18
核桃直接埋地下都可以长
反正我家草坪长过起码8,9棵,当初还以为是杂草,拔出来才发现根部连着核桃。都是
松鼠去年埋的,也不知道到底埋了多少-。-

【在 z***6 的大作中提到】
: 德州天气热买不到桃树和枣树想自己育苗,不知道能不能成功啊?
avatar
m*j
19
tomtom

【在 b*******4 的大作中提到】
: 两款都不便宜,娜款更好一些啊?
avatar
P*b
20
你说的这些数据结构我都没有听过。哎

【在 y*********e 的大作中提到】
: 对于一般的编辑器,用第二种数据结构就足够了。PieceTable的实现太复
: 杂了,corner case特别多,特容易出bug。
: 我当初写的notepad也只是用Spanning Buffer做的。曾尝试写过一个
: PieceTable类,但结果bug太多最后作罢。
: 建议读这本书:Dissecting A C# Application。
: 当初C#才出来的时候,有票人特喜欢C#简介的语言风格,但是痛恶M$收费
: 的Visual Studio,于是乎就他们动手写了一个开源的版本,功能几乎可
: 以跟VisualStudio相比肩。
: 随后他们就写了一本书。书名中的C# Application就是他们做的开源的
: IDE,叫做SharpDevelop。现在Mono的MonoDevelop就是基于

avatar
z*6
21
妹妹是下面哪一个品种?

【在 m****e 的大作中提到】
: Texas本地产的大黄桃比较好种,多产.每年冬天春天到处都是苗卖。今年已经晚了。
avatar
b*t
22
navigon is better than tomtom, garmin and igo.

【在 b*******4 的大作中提到】
: 两款都不便宜,娜款更好一些啊?
avatar
z*6
23
不是核桃,是桃子的核用花盆育苗

【在 k*******e 的大作中提到】
: 核桃直接埋地下都可以长
: 反正我家草坪长过起码8,9棵,当初还以为是杂草,拔出来才发现根部连着核桃。都是
: 松鼠去年埋的,也不知道到底埋了多少-。-

avatar
g*e
24
garmin

【在 b*******4 的大作中提到】
: 两款都不便宜,娜款更好一些啊?
avatar
z*6
25


【在 z***6 的大作中提到】
: 妹妹是下面哪一个品种?
avatar
h*n
26
用过navigon,garmin,tomtom
各有优缺点,最后稳定在navigon
navigon 图标小,最重要的是提醒比garmin即时
garmin胜于navigon的一点是UI好
tomtom没啥亮点,提醒和garmin差不多时间
avatar
z*6
27
avatar
h*n
28

和Navigon,garmin比呢?
avatar
z*6
29
avatar
b*4
30
好的,谢谢各位的意见。
avatar
m*e
31
貌似第二种。应该是peach, 不是apricot 或 plum. 在本版搜山农的邮差贴。
avatar
Y*a
32

你没有用过tomtom的hd traffic, 用过之后就会忘了 navigon和garmin了。
(这三个app我都有)

【在 h****n 的大作中提到】
: 用过navigon,garmin,tomtom
: 各有优缺点,最后稳定在navigon
: navigon 图标小,最重要的是提醒比garmin即时
: garmin胜于navigon的一点是UI好
: tomtom没啥亮点,提醒和garmin差不多时间

avatar
D*l
33

2刀一个月,用的多,可以考虑买。

【在 Y****a 的大作中提到】
:
: 你没有用过tomtom的hd traffic, 用过之后就会忘了 navigon和garmin了。
: (这三个app我都有)

avatar
Y*a
34

你可以趁50%的discount的时候,连买几年的。 嘿嘿
我刚买了3年的。Tomtom的HD traffic在大城市中用简直是神了。

【在 D*******l 的大作中提到】
:
: 2刀一个月,用的多,可以考虑买。

avatar
n*d
35
有那钱卖个独立gps, 100块可以用n年

收费的也可以,免费更好,谢谢大家。

【在 b*******4 的大作中提到】
: 收费的也可以,免费更好,谢谢大家。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。