Grokking Newsletter

By Grokking Vietnam

#241 - Có nên thay thế C/C++ bằng những ngôn ngữ khác?

#245・
10.2K

subscribers

246

issues

Subscribe to our newsletter

By subscribing, you agree with Revue’s Terms of Service and Privacy Policy and understand that Grokking Newsletter will receive your email address.

Grokking Vietnam
Grokking Vietnam
Chúng ta sẽ bắt đầu số newsletter tuần này bằng một vài tin tức không mấy tích cực.
Amazon một công ty tưởng chừng như đứng ngoài làn sóng freeze hiring/layoff khi vẫn có những đợt tuyển dụng ở khắp nơi (kể cả ở Việt Nam) cũng đang lên kế hoạch sa thải 10000 nhân viên. Đợt sa thải này chủ yếu nhắm vào các nhân viên cho bộ phận thiết bị, trợ lý ảo Alexa vốn đông nhân viên và có biên lợi nhuận thấp.
Bên cạnh đó với tình hình tài chính không mấy khả quan, Shopee cũng đang tiến hành bắt đầu vòng cắt giảm nhân sự thứ 3 trong năm.
Tại Việt Nam một số công ty lớn cũng đã có những động thái nhất định trong việc tinh giản bộ máy nhân sự sau nhiều năm mở rộng hoặc thua lỗ. Một số công ty có tài chính tốt cũng đã dè chừng hơn trong việc tuyển dụng và mở rộng nhân sự (mà chúng tôi không tiện nêu tên tại đây cho lắm).
Một tin vui liên quan tới Grokking là Ấn phẩm Dijkstra tập 2 đã bán được gần 1000 cuốn (thật mừng là không lỗ 😰).
Hiện trong kho chỉ còn vài cuốn nữa thôi nên các bạn có thể nhanh tay đặt hàng những cuốn cuối cùng tại đây nhé. Sau đợt này các bạn sẽ phải chờ tới tháng 2 năm sau nếu có nhu cầu muốn đặt hàng tập 2.
Ban biên soạn Grokking Dijkstra rất cảm ơn sự ủng hộ của các bạn độc giả. Hy vọng sang năm sẽ có thể đủ khả năng để tiếp tục phát hành tập 3.

News
(by lpv)
Amazon Is Said to Plan to Lay Off Approximately 10,000 Employees
NSA urges orgs to use memory-safe programming languages
Những bài viết hay
Góc Lập Trình
Đề ra tuần này: Maximize the Confusion of an Exam
(by phucnh)
Cho trước một chuỗi ký tự “answerKey” chỉ gồm 2 ký tự “T” và “F”, và một số nguyên k.
Được phép thực hiện hoán đổi mỗi ký tự từ T thành F hoặc ngược lại nhiều nhất k lần, tìm chiều dài lớn nhất có thể của chuỗi con liên tiếp gồm toàn ký tự T hoặc F.
Ví dụ:
Input: answerKey = “TTFTTFTT”, k = 1
Output: 5
Giải thích: có thể biến đổi chuỗi ban đầu thành “TTTTTFTT” hoặc “TTFTTTTT”.
Lời giải tuần trước: Repeated DNA Sequences
(by ndaadn)
Ta có thể giải quyết bài toán bằng cách sử dụng 2 bảng băm (tạm gọi là “seen” và “result”) và thực hiện duyệt chuỗi DNA theo chuỗi con 10 phần tử liên tục. Ứng với mỗi chuỗi con, ta kiểm tra xem chuỗi này đã xuất hiện trong “seen” hay chưa, nếu chưa thì ta lưu chuỗi vào “seen”, nếu đã xuất hiện thì ta thêm chuỗi vào bảng băm “result”. Kết quả cuối cùng chính là các chuỗi DNA được thêm vào result.
Với N là tổng chiều dài của chuỗi DNA ban đầu, độ phức tạp thuật toán của giải thuật trên là O(10*N).
Mặc dù ta có thể xem độ phức tạp của thuật toán là O(N), do chuỗi chỉ có 10 phần tử, nhưng việc sử dụng hàm substring ở mỗi vòng lặp thực ra khá tốn kém.
Một hướng tiếp cận khác để giải bài toán đó là giải thuật Rabin Karp (còn gọi là rolling hash).
Bạn đọc có thể tìm hiểu kỹ hơn về giải thuật thông qua trang wiki Rabin–Karp algorithm.
Đối với bài toán này, ta tính giá trị băm cho chuỗi 10 phần tử đầu tiên. Sau đó ở mỗi bước lặp, ta sẽ tính lại giá trị hàm băm của chuỗi mới bằng cách trừ đi giá trị băm của phần tử bị loại bỏ, và cộng thêm giá trị băm của phần tử mới thêm vào. Công thức cho hàm băm như sau:
hash = 4^k * v
Với k là vị trí của phần tử trong chuỗi 10 phần tử. v là giá trị được gán cho mỗi phần tử.
Cài đặt tham khảo: https://pastebin.com/mgGZPsym
Độ phức tạp thuật toán cho giải thuật trên là O(N).
Code & Tools
History
Feedback
Bạn đánh giá nội dung số newsletter này thế nào?
(1 = Rất tệ / 5 = Rất tốt)
👎 1 —— 2 —— 3 —— 4 —— 5 👍
(Việc đánh giá của các bạn là rất quan trọng, sẽ giúp chúng tôi liên tục cải thiện nội dung newsletter tốt hơn)
Grokking mang lại cho các bạn những kiến thức mới mẻ và hữu ích thông qua:
  • Tech Talk: Là một hoạt động thường xuyên của Grokking từ những ngày đầu thành lập. Tại đây các diễn giả chia sẻ kiến thức xoay quanh Computer Science và Software Engineer. Các buổi Tech Talk đều được record và upload lên kênh youtube của Grokking.
  • Grokking Knowledge Graph: Tập hợp những nguồn kiến thức phong phú với hơn 1000 bài viết chọn lọc, các đầu sách, khóa học, v.v… Các bài viết đều được gán nhãn để giúp bạn đọc dễ dàng tìm kiếm.
  • Webinar: Là chương trình kết nối các kỹ sư Việt Nam và các kỹ sư đang làm việc tại các công ty công nghệ hàng đầu thế giới.
  • Dijkstra: Một ấn phẩm được xuất bản bởi các thành viên của Grokking. Với những bài viết đào sâu vào kỹ thuật và kiến thức khoa học máy tính.
  • Kipalog: Nền tảng chia sẻ kiến thức dành cho các lập trình viên.
  • Newsletter: Những bài viết hay về công nghệ sẽ được gửi tới bạn hàng tuần qua email.
Xin hẹn gặp lại các bạn vào tuần sau.
Quotes
“Theory and practice sometimes clash. And when that happens, theory loses. Every single time.” - Linus Torvalds
Did you enjoy this issue? Yes No
Grokking Vietnam
Grokking Vietnam

Cảm ơn bạn đã dành thời gian đọc newsletter kỳ này và chúng tôi hi vọng rằng bạn đã khám phá ra một số điều mới mẻ từ các bài viết trên. Các bạn có thể đọc lại các số cũ tại website newsletter.grokking.org

In order to unsubscribe, click here.
If you were forwarded this newsletter and you like it, you can subscribe here.
Created with Revue by Twitter.
Viet Nam