sáng ngày gió mùa, nắng dựng tôi
dậy. dạo ấy nắng nhạt, len lỏi qua ô cửa sổ, nằm cạnh tôi. nắng biết tôi
mê man trong cơn gió mùa. những ngày gió mùa ở Hà nội, cách đây chỉ một
năm thôi, là những ngày đầy đọa, những ngày ôm vội tấm áo, những này
nâng niu nắng, chỉ chờ nắng xuống để ôm vào lòng.
ấy vậy mà năm nay, tôi lại thích gió mùa...
tôi chờ gió mùa trên những cánh hoa đẹp, tôi chờ gió gợn mặt hồ. tôi đắm chìm trong những nơi hay ho mà tôi mơ mộng. tôi quên mất, tôi quên mất nắng.
thi thoảng tôi thấy nắng đổ xuống kẽ lá trên đường Phan Đình Phùng.
thi thoảng nắng gọi tôi ở ngoài cửa sổ.
có hôm gặng mình, nắng hỏi tôi:
- sao anh không gặp nắng?
tôi thẹn mình quay đi.
trong những ngày ở Hà nội, những ngày gió mùa, tôi chẳng màng tới nắng.
nắng nhạt dần, rồi tắt hẳn... nắng nên như thế. Khi ở vùng đất này là
mùa đông lạnh lẽo. Bên kia quả đất, người ta hân hoan đón nắng.
nắng đi. tôi toan đuổi theo trong những chiêm bao về ngày nắng đẹp, rơi
nắng rơi
mưa bắt đầu rơi, gió mùa làm tôi thoáng man mác mà nhận ra rằng
vì anh lỡ thích Hà nội những ngày gió mùa.
vội vã
tôi đi về những ngày đông.
Thứ Sáu, 20 tháng 12, 2019
Thứ Sáu, 21 tháng 6, 2019
Thứ Năm, 25 tháng 10, 2018
[Algorithm] Phương pháp sắp xếp mới, mà tôi gọi là Domain Sorting.
Tựa:
Sắp xếp xưa nay là một vấn đề hoàn toàn không mới mẻ và đã có rất nhiều thuật toán về sắp xếp từ đơn giản đến phức tạp như sắp xếp nổi bọt, sắp xếp chèn, sắp xếp trộn, sắp xếp nhanh... Tuy nhiên, dữ liệu ở đời thực quả thật thú vị khi chúng luôn ngẫu nhiên và sự ngẫu nhiên này giá trị ở chỗ chúng luôn có khoảng tăng và giảm nhất định, mà các phương pháp sắp xếp cổ điển chưa tận dụng được. Vậy nên tôi nghĩ ra phương pháp sắp xếp theo miền.
Chi tiết:
Trước tiên ta xuất phát từ một số bài toán nhỏ như sau, với định nghĩa "miền" là một dải giá trị liên tục đơn điệu tăng [a,b] với a,b được gọi là "bao miền":
Cho trước 2 miền giao nhau [a,b] và [c,d], làm thế nào để trộn hai miền này để thu được miền [a,d]?
Nhận xét 1: Nếu a=b và |[c,d]|<=2 việc trộn miền chỉ đơn thuần là so sánh a với hai bao miền còn lại, rồi tìm cách đặt a vào miền đó.
Nhận xét 2: Nếu [a,b]={a,[g,h],b} thuộc [c,d], việc trộn với độ phức tạp O(n), được thực hiện như sau: Giả sử [c,d]={c1,...,cn,{e,[i,k],f},dn,..,d1}, với [e,f] và [a,b] là hai miền giao nhau hoặc bao nhau, ta trộn miền [a] và miền [c1,e] theo Nhận xét 1, tương tự với b. Sau đó tiếp tục trộn miền [i,k] và miền con [g,h] của [a,b] vào nhau.
Nhận xét 3: Nếu 2 miền giao nhau, ta tách thành 3 miền, và chỉ xử lý phần giao nhau.
Nhận xét 4: Với một dãy các miền không giao nhau, ta trộn 2 miền kề nhau đôi một, sau đó lặp lại cho đến khi chỉ còn 1 miền, nếu gặp 2 miền giao nhau ta lại làm mịn tiếp.
Dựa trên những nhận xét trên, ta có sắp xếp miền với tư tưởng đệ quy. Ví dụ:
1 5 7 3 6 7 3 2 6 9 4 2 10
[1 5 7] [3 6 7] [3 2] [6 9] [4 2] [10] (đây là các khoảng tăng giảm)
[1 5 7] [3 6 7] [2 3] [6 9] [2 4] [10] (lật thành toàn bộ tăng)
[1 [5]--[3 6 7] 7] [2 3 6 9] [2 4 10] (trộn miền 1-2, 3-4, 5-6)
[1 [3 [5] 6 7] 7] [2 3 6 9] [2 4 10] (trộn miền con của 1-2)
[1 3 5 6 7 7] [2 3 6 9] [2 4 10]
[1 [2 3 6 9]--[3 5 6 7 7] ] [2 4 10] (trộn miền 1-2)
[1 2 3 [6]--[3 5 6 7 7] 9] [2 4 10] (trộn miền con của 1-2)
[1 2 3 3 5 [6]--[6] 7 7 9] [2 4 10]
[1 2 3 3 5 6 6 7 7 9] [2 4 10]
[1 2 [3 3 5 6 6 7 7 9]--[2 4 10] ]
[1 2 2 [4]--[3 3 5 6 6 7 7 9] 10]
[1 2 2 3 3 [4] 5 6 6 7 7 9 10]
[1 2 2 3 3 4 5 6 6 7 7 9 10] xong!
Tóm lại:
Trên đây là những bước triển khai rất sơ sài về một phương pháp sắp xếp cảu tôi, có lẽ bạn đang thắc mắc tại sao tôi viết loằng ngoằng ra vài dòng sau đó vứt đấy, thì tôi xin điều trần rằng:
- Thuật toán tuy mới nhưng khi nhìn lại và suy ngẫm, tôi cho rằng nó chẳng có gì thú vị. Thậm chí nếu nhìn sâu ra thì đệch mợ, nó na ná merge sort cải tiến. Thế mới cay!
- Về độ phức tạp, nó không tốt hơn các loại sort đang thông dụng, tôi ước chừng cũng rơi vào khoảng NlogN nếu gặp case xấu, tức là ngang merge sort nếu vào case xấu, cụ thể là khi các dãy tăng đơn điệu có độ dài bằng nhau và bằng 2. Tôi sẽ kiểm chứng lại sau!...
Cuối cùng thì vẫn sướng sướng vì nghĩ ra cái gì đó, hi vọng một ngày nào đó tôi tìm ra cái gì mới hơn ở trong bài viết này. Cheer!
Sắp xếp xưa nay là một vấn đề hoàn toàn không mới mẻ và đã có rất nhiều thuật toán về sắp xếp từ đơn giản đến phức tạp như sắp xếp nổi bọt, sắp xếp chèn, sắp xếp trộn, sắp xếp nhanh... Tuy nhiên, dữ liệu ở đời thực quả thật thú vị khi chúng luôn ngẫu nhiên và sự ngẫu nhiên này giá trị ở chỗ chúng luôn có khoảng tăng và giảm nhất định, mà các phương pháp sắp xếp cổ điển chưa tận dụng được. Vậy nên tôi nghĩ ra phương pháp sắp xếp theo miền.
Chi tiết:
Trước tiên ta xuất phát từ một số bài toán nhỏ như sau, với định nghĩa "miền" là một dải giá trị liên tục đơn điệu tăng [a,b] với a,b được gọi là "bao miền":
Cho trước 2 miền giao nhau [a,b] và [c,d], làm thế nào để trộn hai miền này để thu được miền [a,d]?
Nhận xét 1: Nếu a=b và |[c,d]|<=2 việc trộn miền chỉ đơn thuần là so sánh a với hai bao miền còn lại, rồi tìm cách đặt a vào miền đó.
Nhận xét 2: Nếu [a,b]={a,[g,h],b} thuộc [c,d], việc trộn với độ phức tạp O(n), được thực hiện như sau: Giả sử [c,d]={c1,...,cn,{e,[i,k],f},dn,..,d1}, với [e,f] và [a,b] là hai miền giao nhau hoặc bao nhau, ta trộn miền [a] và miền [c1,e] theo Nhận xét 1, tương tự với b. Sau đó tiếp tục trộn miền [i,k] và miền con [g,h] của [a,b] vào nhau.
Nhận xét 3: Nếu 2 miền giao nhau, ta tách thành 3 miền, và chỉ xử lý phần giao nhau.
Nhận xét 4: Với một dãy các miền không giao nhau, ta trộn 2 miền kề nhau đôi một, sau đó lặp lại cho đến khi chỉ còn 1 miền, nếu gặp 2 miền giao nhau ta lại làm mịn tiếp.
Dựa trên những nhận xét trên, ta có sắp xếp miền với tư tưởng đệ quy. Ví dụ:
1 5 7 3 6 7 3 2 6 9 4 2 10
[1 5 7] [3 6 7] [3 2] [6 9] [4 2] [10] (đây là các khoảng tăng giảm)
[1 5 7] [3 6 7] [2 3] [6 9] [2 4] [10] (lật thành toàn bộ tăng)
[1 [5]--[3 6 7] 7] [2 3 6 9] [2 4 10] (trộn miền 1-2, 3-4, 5-6)
[1 [3 [5] 6 7] 7] [2 3 6 9] [2 4 10] (trộn miền con của 1-2)
[1 3 5 6 7 7] [2 3 6 9] [2 4 10]
[1 [2 3 6 9]--[3 5 6 7 7] ] [2 4 10] (trộn miền 1-2)
[1 2 3 [6]--[3 5 6 7 7] 9] [2 4 10] (trộn miền con của 1-2)
[1 2 3 3 5 [6]--[6] 7 7 9] [2 4 10]
[1 2 3 3 5 6 6 7 7 9] [2 4 10]
[1 2 [3 3 5 6 6 7 7 9]--[2 4 10] ]
[1 2 2 [4]--[3 3 5 6 6 7 7 9] 10]
[1 2 2 3 3 [4] 5 6 6 7 7 9 10]
[1 2 2 3 3 4 5 6 6 7 7 9 10] xong!
Tóm lại:
Trên đây là những bước triển khai rất sơ sài về một phương pháp sắp xếp cảu tôi, có lẽ bạn đang thắc mắc tại sao tôi viết loằng ngoằng ra vài dòng sau đó vứt đấy, thì tôi xin điều trần rằng:
- Thuật toán tuy mới nhưng khi nhìn lại và suy ngẫm, tôi cho rằng nó chẳng có gì thú vị. Thậm chí nếu nhìn sâu ra thì đệch mợ, nó na ná merge sort cải tiến. Thế mới cay!
- Về độ phức tạp, nó không tốt hơn các loại sort đang thông dụng, tôi ước chừng cũng rơi vào khoảng NlogN nếu gặp case xấu, tức là ngang merge sort nếu vào case xấu, cụ thể là khi các dãy tăng đơn điệu có độ dài bằng nhau và bằng 2. Tôi sẽ kiểm chứng lại sau!...
Cuối cùng thì vẫn sướng sướng vì nghĩ ra cái gì đó, hi vọng một ngày nào đó tôi tìm ra cái gì mới hơn ở trong bài viết này. Cheer!
Thứ Sáu, 30 tháng 3, 2018
[Toán] Chứng minh Fermat nhỏ bằng sơ cấp
Ta vốn biết các chứng minh liên quan đến nhóm cylic Z/n và phi hàm Euler. Nhưng với sơ cấp thì sao.
Fermat nhỏ được phát biểu như sau:
chia hết cho n (với mọi n). Vậy nên
Fermat nhỏ được phát biểu như sau:
"Định lý nhỏ của Fermat khẳng định rằng nếuXuất phát từ khai triển của nhị thức Newton ta cólà một số nguyên tố, thì với số nguyên
bất kỳ,
sẽ chia hết cho
."
Dễ dàng thấy rằng nếu n nguyên tố
Nên
Sau a lần ta được
Thứ Sáu, 25 tháng 8, 2017
Mũ bảo hiểm.
Ở nhà các cụ hay chê mình ngây thơ, vì vài lần mình đem kể chuyện bị mất cái này cái kia, mua đắt, bị "cướp tiền giữa ngã tư". Nom các cụ chê cũng chuẩn, nhưng mình cười hềnh hệch, nhiều khi phản biện lòi hai con ốc. Nói đến tranh luận, phe 6x thường xuyên đưa ra lý lẽ theo chủ trương "xã hội bây giờ mà con còn nghĩ là...", còn mình biết không cãi nổi nhưng vẫn tôn thờ quan điểm "xã hội bây giờ mà mẹ còn nghĩ là...". Đôi khi các cụ nghĩ cấp tiến, rất cập nhật, nhưng qua góc nhìn rất thị phi, hoài nghi và qua tâm hồn rất "thuần túy".
Cụ nhà mình là một "hacker", cụ phát hiện ra "backdoor" của Đường sắt VN, nghe có vẻ phi thường nhưng thật ra là quá trình "bắt tay hai bước" với nhân viên toa, bước thứ nhất gửi cờ SYN,"MON", bước thứ hai nhân viên toa gửi lại cụ cờ ACK,"SIT", và cụ lên tàu với giá bằng 1/4. Nhiều lần mình phàn nàn về chuyện này, nhưng chỉ nhận lại lý lẽ "Mình không làm thì người ta cũng làm, vả lại nhân viên người ta lương bèo bọt, mình đi như này chả ảnh hưởng đến ai..." Sau khi tranh luận thường mình sẽ thua rồi bỏ lên gác với câu nói vọng lên "Con nghĩ như thế thì làm sao mà sống được ở cái xã hội này...".Cảm giác như thi 30 điểm mà vẫn trượt đại học!
Tất nhiên là mình vẫn giữ cái ngây thơ ấy chứ. Lắm lúc cố tình để mũ bảo hiểm ở ngoài xe, thường thì mọi người sẽ cất vào cốp, nhưng không, mình để xơi xơi ra, cốt là muốn chứng minh rằng mình đang sống trong xã hội 2017 rất văn minh tân tiến, tươi đẹp.....Và mình vừa phải mua chiếc mũ thứ năm kể từ khi lên Hà Nội. Nhưng mình tin rằng mình đã rút ra được công thức của sự văn minh, rất hữu ích, các bạn có thể cop lại, in ra rồi dán vào xe như cách người ta yêu cầu dán khẩu hiệu "Tính mạng con người là trên hết" trước mặt bác tài, mặc dù mình không đảm bảo các bạn mảy may đọc nó mỗi lần lên xe:
Cụ nhà mình là một "hacker", cụ phát hiện ra "backdoor" của Đường sắt VN, nghe có vẻ phi thường nhưng thật ra là quá trình "bắt tay hai bước" với nhân viên toa, bước thứ nhất gửi cờ SYN,"MON", bước thứ hai nhân viên toa gửi lại cụ cờ ACK,"SIT", và cụ lên tàu với giá bằng 1/4. Nhiều lần mình phàn nàn về chuyện này, nhưng chỉ nhận lại lý lẽ "Mình không làm thì người ta cũng làm, vả lại nhân viên người ta lương bèo bọt, mình đi như này chả ảnh hưởng đến ai..." Sau khi tranh luận thường mình sẽ thua rồi bỏ lên gác với câu nói vọng lên "Con nghĩ như thế thì làm sao mà sống được ở cái xã hội này...".Cảm giác như thi 30 điểm mà vẫn trượt đại học!
Tất nhiên là mình vẫn giữ cái ngây thơ ấy chứ. Lắm lúc cố tình để mũ bảo hiểm ở ngoài xe, thường thì mọi người sẽ cất vào cốp, nhưng không, mình để xơi xơi ra, cốt là muốn chứng minh rằng mình đang sống trong xã hội 2017 rất văn minh tân tiến, tươi đẹp.....Và mình vừa phải mua chiếc mũ thứ năm kể từ khi lên Hà Nội. Nhưng mình tin rằng mình đã rút ra được công thức của sự văn minh, rất hữu ích, các bạn có thể cop lại, in ra rồi dán vào xe như cách người ta yêu cầu dán khẩu hiệu "Tính mạng con người là trên hết" trước mặt bác tài, mặc dù mình không đảm bảo các bạn mảy may đọc nó mỗi lần lên xe:
"Gửi xe nhìn trước ngó sau
Xe cạnh không mũ cất ngay mũ vào
Kẻo lúc mà có làm sao
Tiện tay mượn mũ, làm sao mà về."
Đăng ký:
Bài đăng (Atom)
