窗

歌手歌词收集器

懒, 直接上源码

输出来的东西还有点怪怪的, 懒得用正则表达式修复了

import requests
from bs4 import BeautifulSoup as bs
import re
import time

rootAdress = "https://www.azlyrics.com/"
htmlData = []
songURLList = []

pattern = re.compile('../lyrics/.*')
titlePattern = re.compile('(?<=</div><b>[......]

继续阅读

树, 森林, 二叉树

一大堆树来了

树转换为二叉树

  • 加线.在所有兄弟结点之间加一条连线.

  • 去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线.

  • 层次调整.以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明.(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子.

森林转换为二叉树

  • 把每棵树转换为二叉树.

  • 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来.

二叉树转换为树

是[……]

继续阅读

算法——变长数组Stack

Resize Array

First Try

push()  //增加1个Array的size
pop()   //减少1个Array的size

但这样的方法代价太昂贵,需要将所有的元素copy至新的array.

push前N个元素需要1 + 2 + ... + N \sim \frac{N^2}{2}

Then?

push

所以我们在每次增大数组时,double数组长度。

这样我们的时间开销变为N + (2+4+8+...+N) \sim[......]

继续阅读

二叉树

二叉树的生成和操作

真的没想到,这种简单的问题居然还要开一个Topic,

I Slay!

二叉树的结构

一个无性繁殖人生了两个孩子,没想到吧,孩子还是无性繁殖的…

*真是恐怖*

那么最简单元就是上图这样了。

代码如此:

struct BinaryTree {
  Element data;    //节点的数据类型
  struct BiTree* leftChild;  //1号孩子
  struct BiTree* rightChild; //2号孩子
}tree;  //[......]

继续阅读

窗的小记 4/20

完成了数模竞赛的论文

真的挺累,也明白了一个道理——上班一定得摸鱼,不然会被累死,或许这就是社畜吧。

其实一直和队友缺乏沟通,到最后再开始火急火燎的沟通起来,但时间已经很紧张了。

问题在此:我不愿意指出不熟悉的人犯得错误,有时很真的很耽误时间,只能把情绪慢慢累积到最后再一次性倾泻出去,当然,并不是每次都会弄得天翻地覆。

下次有话就直说吧,不要怕犯错。

You look nice.

博客真好

写给别人看和写给自己看的时候,语气完全不同了,你也会这样吗?

Bindow,我是说你。

或许你也这么想?

小秘密藏在被窝里,让小熊一家陪你分担吧。

记得,被子要厚一点,不然就没有山来阻隔寒风了。

Born[……]

继续阅读

C++ P48 – STD::VECTOR 的优化

优化Vector之前我们要干些什么?

  1. 知道我们要优化什么(环境);
  2. 知道用什么方式来优化问题。

优化前环境:

一个测试用结构

这个结构,由两个构造器组成, 第一个在被构造后显示“Constructed!”, 而第二个则是接受一个在别处声明过的Vectex结构再被传入Vectex中(Copy), 被Copy后会显示“Copied!".

从运行结果可以看出,在main函数中添加元素调用了3次创建结构和6次复制, 这样的效率是十分不理想的. 这就为我们接下来的优化提供了条件——减少复制次数.

优化

为了减少复制次数, 我们要先了解为什么会出现复制.

push_back

vectexes.push_[......]

继续阅读

重启窗的时刻到了

很多因素让我重启了窗的网站,无论是备案成功还是打折的服务器都一步步把窗推向了重启的那一刻。

窗,对面的是谁呢?

来吧,迎接Bindow的回归。

[……]

继续阅读