Showing posts with label CTDLGT. Show all posts
Showing posts with label CTDLGT. Show all posts

Tuesday, March 14, 2017

Bài tập CTDLGT cho SIE 20162

Bài tập cho SIE CTDLGT 20162

Đầu vào:
1 tập văn bản tiếng việt (có thể lấy từ các đoạn chat hoặc nhắn tin cá nhân)
1 từ điển tiếng việt ngắn

Yêu cầu
Lọc và thống kê các 1-gram, 2-gram từ tập văn bản tiếng Việt
(1 gram là 1 âm tiết, 2 gram là 2 âm tiết)

VD câu "BK Hà Nội"
thì 1-gram là BK, Hà, Nội
2-gram là BK Hà, Hà Nội

  • Loại các gram có tần số xuất hiện <=3 mà không chứa toàn chữ cái viết hoa
  • Thống kê các gram đó và sắp xếp theo thứ tự giảm đần về tần số
Xây dựng gợi ý theo cấp độ từ
  •  Khi người dùng gõ vào xong 1 từ (nhập từ + dấu cách trống) thì sẽ duyệt các 1 giảm và 2 Gram có, và cả các từ trong từ điển. Trường hợp mà từ đó chưa có trong từ điển hoặc danh sách thì gợi ý các từ có thể tạo ra được hoặc từ chính xác (vì có thể người đó gõ sai).
VD. Người dùng gõ vào Bn thì đưa ra gợi ý là: BK, BK Hà

Xây dựng gợi ý theo cấp độ chữ cái
  • Khi người dùng nhập vào >=2 chữ cái thì gợi ý tiếp các chữ cái và từ còn lại.
VD. Người dùng nhập vào Hà thì gợi ý là Hà Nội

Thursday, March 9, 2017

Bài tập CTDLGT Giữa kỳ cho DH 20162 (học chiều thứ 5)

Bài 1. Cho 1 dãy gồm n số dương, hay xây dựng hàm chia day số này thành 2 nửa sao cho chênh lệch tổng giá trị các phần tử của 2 nửa là nhỏ nhất trong 2 trường hợp
a. Không được thay đổi vị trí các phần tử
b. Được thay đổi vị trí các phần tử

Bài 2. Cho 1 mảng có các phần tử bị trùng. Hãy xây dựng thuật toán sắp xếp mảng sao cho các phần tử bị trùng được đẩy về cuối dãy.

VD. 1,3,2,4,3,2,1,6 ==> 1,2,3,4,6,1,3,2

Bài 3. Cho 1 mảng gồm n số nguyên. Hãy tìm và in ra các bộ 3 có tổng bằng 0, hoặc thông báo không tồn tại bộ nào như vậy.

VD. 1,3,-2,4,-6,5,-4,2,-1
{1,3,-4}, {5,-4,1}

Thời gian thực hiện cần < O(n^3)

Bài 4. Viết hàm xóa các phần tử bị lặp trong DSLK đơn (không có thứ tự) với thời gian thực hiện O(n) mà không cần dùng thêm bộ nhớ phụ.
Không được sắp xếp danh sách !

Được khai báo thêm con trỏ và biến tạm

Bài 5. Cho danh sách liên kết đơn nối vòng, hay viết hàm trả về phần tử giữa danh sách chỉ với 1 lần duyệt

Bài 6. Viết hàm xóa phần tử hiện tại của DSLK đơn khi mà có biết 1 con trỏ tới phần tử cần xóa (không được duyệt để tìm phần tử ngay trước nó)

Bài 7. Đọc vào 1 file XML/HTML. Viết chương trình kiểm tra các thẻ Tag có hợp lệ hay không. Nếu không thì in ra vị trí thẻ bị lỗi đầu tiên.
Tag mở cần có 1 tag đóng tương ứng (bỏ qua tag <p> hoặc <br> nếu cần)

Bài 8. Xây dựng tiện ích Undo và reDo cho text editor với tính năng quay lui lại sửa đổi gần nhất dùng Stack. Nếu dùng trên console thì có thể chọn hot key Ctr-U và Ctrl-I và dùng hàm để bắt các hotkey này để xử lý.

Bài 9. Cho tập gồm n điểm trong không gian 2 chiều. Hãy xây dựng chương trình dựa trên chia để trị để tìm và trả về 2 cập điểm gần nhau nhất với thời gian <O(n^2)

Bài 10. Cho bảng gồm các ký tự và dấu cách trống được mã hóa
a : 1
b : 2
..
z : 26
' ' : 27

abc --> 123

Và 1 từ điển

Hãy xây dựng chương trình mã hóa và giải mã các từ trong 1 đoạn văn (các từ này phải có trong từ điển)

123 >> abc, aw, lc

Bài 11. Cho 1 tập các khoảng thời gian còn trống của máy
[-1,9],[1,10],[0,3],[9,10],[3,14],[2,9],[10,16]

và 1 khoảng thời gian cần sản xuất VD [2,15]

Hãy xây dựng chương trình tìm  cách bố trí số lượng máy ít nhất để có thể sản xuất, hoặc thông báo là không thể bố trí được máy

[2,15] = [-1,9], [9,10],[10,16] hoặc [1,10],[10,16]

Ở đây cách 2 dùng 2 máy sẽ được chọn

Bài 12. Cho ma trận nxn với m chướng ngại vật

0 0 0 0 0 0
0 1 0 0 1 0
0 1 1 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0

Chướng ngại vật biểu diễn bằng số 1
1 robot do đường có thể đi theo các hướng
1: lên trên
2: sang phải
3: xuống dưới
4: sang trái
Nếu vào chướng ngại vật thì robot sẽ không di chuyển được

Robot bắt đầu từ ô đầu tiên bên trái (màu đỏ) và gửi về hành trình của mình là chuỗi di chuyển 2 2 2 3 2 3 2
Hãy tìm và trả về vị trí cuối cùng của robot
Như trong vd thì robot sẽ ở ô  bôi vàng


Thursday, September 22, 2016

Bài tập CTDLGT giữa kỳ 20161

Cài đặt dùng Java hoặc C# hoặc C/C++


Bài 1. Cài đặt các hàm đầy đủ để mô tả cấu trúc dữ liệu mảng kích thước biến đổi

Các thao tác cần có gồm
  • Add (int value): Thêm phần tử vào cuối mảng,
  • RemoveAt(int index): xóa phần tử ở vị trí index 
  • Size(): trả về số lượng phần tử hiện có của mảng
  • Maxsize(): trả về kích thước/ số lượng phần tử tối đa mà cấu trúc có thể lưu
  • Find(int value): trả về vị trí phần tử có gía trị bằng value trong mảng nếu có, ngược lại thì trả về giá trị -1
  • Get(int index) trả về giá trị phần tử tại ví trí index trong mảng nếu có

Xây dựng thành class là tốt nhất, nếu không tổ chức thành các hàm trong C/C++ với tham số truyền vào như yêu cầu trên.

Bài 2. Cài đặt đầy đủ các hàm/ phương thức của cấu trúc danh sách liên kết đơn nối thẳng có kiểu class T

  • Thêm (đâù, giữa/cuối)
  • Xóa (đâù, giữa/cuối)
  • Tìm kiếm

Các lớp cài đặt này nên dùng Template class

Bài 3. Cài đặt các hàm mô tả cấu trúc danh sách liên kết đơn nối vòng

Bài 4. Cài đặt các hàm mô tả danh sách liên kết đôi

Bài 5. Cài đặt cấu trúc Ngăn xếp/Hàng đợi dùng mảng kích thước biến đổi

Bài 6. Cài đặt lớp biểu diễn cây nhị phân với các tính năng sau
  • Thêm nút trái
  • Thêm nút phải
  • Lấy giá trị nút trái/phải
  • Đếm số nút trên cây
  • Tìm nút lá sâu nhất/nông nhất (thời gian O(n))
  • Tìm chiều cao của cây
  • Tìm tổ tiên chung gần nhất của 2 nút bất kỳ trên cây
  • Duyệt cây theo thứ tự trước/giữa/sau
Bài 7. Cài đặt cây nhị phân để biểu diễn cây biểu thức
  • Tạo cây biểu thức từ biểu thức trung tố (biểu thức chỉ bao gồm các toán hang 1 chữ cái/chữ số và các toán tử đơn giản +,-,*,/,%,^,!,... và dấu ngoặc đơn)
  • In ra biểu thức tiền tố, trung tố, hậu tố
  • Kiểm tra biểu thức trung tố ban đầu có phải hợp lệ (dấu ngoặc hợp lệ và toán tử hợp lệ, chỉ cần check với một vài toán tử thông dụng)
Bài 8. Xây dựng thuật toán sinh ra màn chơi sodoku bằng cách thêm ngẫu nhiên n số (từ 1-9 vào một màn chơi ban đầu trắng). Thuật toán này cần cài đặt dùng Backtracking và đảm bảo là màn chơi này hợp lệ.

Bài 9. Cài đặt lớp biểu diễn cây nhị phân tìm kiếm tổng quát (có thể kế thừa từ lớp trong bài 6) hỗ trợ các thao tác
  • Kiểm tra cây nhị phân có phải là cây nhị phân tìm kiếm
  • Kiểm tra cây nhị phân tìm kiếm có phải cây cân bằng
  • Thực hiện hàm tìm kiếm và trả về nút chứa khóa (nếu tìm thấy) trên cây
  • Thực hiện hàm thêm nút/xóa nút trên cây 

Wednesday, May 4, 2016

Bài tập lớn CTDLGT

Bài 1. Đánh giá độ tương tự của các văn bản theo jacard

Độ tương tự theo jacard của 2 tập A,B được tính như sau

Cách 1. Mỗi phần tử trong tập hợp chỉ được tính 1 lần

Sim(A,B) = (#số phần tử chung của A và B) / (#Tổng số phần tử của A và B)

VD.
A = {a,b,c,f}
B = {a,e,f,g}

#số phần tử chung của A và B = {a,f}
#Tổng số phần tử của A và B = {a,b,c,e,f,g}

Sim(A,B) = 2/6 = 1/3

Cách 2. bag-similarity

A = {a, a, a, b}
B = {a, a, b, b, c}

#số phần tử chung của A và B = {a,a} và {b} (số lần xuất hiện ít nhất của phần tử chung)
#Tổng số phần tử của A và B = {a, a, a, b} và {a, a, b, b, c} (toognr số phần tử của cả 2 tập)

Sim(A,B) = 3/9 = 1/3

Hãy tính và đưa ra id của các văn bản tương tự nhau theo thứ tự giảm dần

====================================
Dữ liệu:

Gồm 5 trường, được ngăn cách với nhau bởi dấu = và ""

trường đầu tiên là id,
trường tiếp theo là wordsegmented
tiếp theo là 2garms
sau đó là 3grams
và cuối cùng là 4grams


"id"="wordsegmented"="2grams"="3grams"="4grams"
"1"="Vova thích gì
Trong giờ học, cô_giáo
– Các em chú ý, hãy nhìn cô và nói xem các em thích cái gì trên người cô và cô sẽ nói cho_biết lớn lên các em làm gì
Cô bé Masha
thưa cô, em thích mái_tóc của cô
– Ôi_Masha yêu quí, lớn lên em sẽ trở_thành một thợ làm_đầu nổi_tiếng
Cậu bé Pêchia
Thưa cô, đôi mắt của cô rất đẹp
– Cám_ơn Pêchia, lớn lên em sẽ trở_thành bác_sỹ nhãn_khoa giỏi
Thế còn Vôva, em nói gì đi chứ, đừng có xịu mặt như vậy
Vôva
Thưa cô, em biết nói gì bây_giờ
Bố_mẹ em chắc sẽ buồn lắm khi biết em chỉ làm một công_nhân vắt sữa bò ở nông_trại"="Vova_thích,Trong_giờ,giờ_học,cô_giáo,Các_em,em_chú,chú_ý,hãy_nhìn,nhìn_cô,cô_và,và_nói,nói_xem,xem_các,các_em,em_thích,thích_cái,cái_gì,gì_trên,trên_người,người_cô,cô_và,và_cô,cô_sẽ,sẽ_nói,nói_cho,cho_biết,biết_lớn,lớn_lên,lên_các,các_em,em_làm,làm_gì,Cô_bé,bé_Masha,thưa_cô,em_thích,thích_mái,mái_tóc,tóc_của,của_cô,Ôi_Masha,Masha_yêu,yêu_quí,lớn_lên,lên_em,em_sẽ,sẽ_trở,trở_thành,thành_một,một_thợ,thợ_làm,làm_đầu,đầu_nổi,nổi_tiếng,Cậu_bé,bé_Pêchia,Thưa_cô,đôi_mắt,mắt_của,của_cô,cô_rất,rất_đẹp,Cám_ơn,ơn_Pêchia,lớn_lên,lên_em,em_sẽ,sẽ_trở,trở_thành,thành_bác,bác_sỹ,sỹ_nhãn,nhãn_khoa,khoa_giỏi,Thế_còn,còn_Vôva,em_nói,nói_gì,gì_đi,đi_chứ,đừng_có,có_xịu,xịu_mặt,mặt_như,như_vậy,Thưa_cô,em_biết,biết_nói,nói_gì,gì_bây,bây_giờ,Bố_mẹ,mẹ_em,em_chắc,chắc_sẽ,sẽ_buồn,buồn_lắm,lắm_khi,khi_biết,biết_em,em_chỉ,chỉ_làm,làm_một,một_công,công_nhân,nhân_vắt,vắt_sữa,sữa_bò,bò_ở,ở_nông,nông_trại"="Vova_thích_gì,Trong_giờ_học,Các_em_chú,em_chú_ý,hãy_nhìn_cô,nhìn_cô_và,cô_và_nói,và_nói_xem,nói_xem_các,xem_các_em,các_em_thích,em_thích_cái,thích_cái_gì,cái_gì_trên,gì_trên_người,trên_người_cô,người_cô_và,cô_và_cô,và_cô_sẽ,cô_sẽ_nói,sẽ_nói_cho,nói_cho_biết,cho_biết_lớn,biết_lớn_lên,lớn_lên_các,lên_các_em,các_em_làm,em_làm_gì,Cô_bé_Masha,em_thích_mái,thích_mái_tóc,mái_tóc_của,tóc_của_cô,Ôi_Masha_yêu,Masha_yêu_quí,lớn_lên_em,lên_em_sẽ,em_sẽ_trở,sẽ_trở_thành,trở_thành_một,thành_một_thợ,một_thợ_làm,thợ_làm_đầu,làm_đầu_nổi,đầu_nổi_tiếng,Cậu_bé_Pêchia,đôi_mắt_của,mắt_của_cô,của_cô_rất,cô_rất_đẹp,Cám_ơn_Pêchia,lớn_lên_em,lên_em_sẽ,em_sẽ_trở,sẽ_trở_thành,trở_thành_bác,thành_bác_sỹ,bác_sỹ_nhãn,sỹ_nhãn_khoa,nhãn_khoa_giỏi,Thế_còn_Vôva,em_nói_gì,nói_gì_đi,gì_đi_chứ,đừng_có_xịu,có_xịu_mặt,xịu_mặt_như,mặt_như_vậy,em_biết_nói,biết_nói_gì,nói_gì_bây,gì_bây_giờ,Bố_mẹ_em,mẹ_em_chắc,em_chắc_sẽ,chắc_sẽ_buồn,sẽ_buồn_lắm,buồn_lắm_khi,lắm_khi_biết,khi_biết_em,biết_em_chỉ,em_chỉ_làm,chỉ_làm_một,làm_một_công,một_công_nhân,công_nhân_vắt,nhân_vắt_sữa,vắt_sữa_bò,sữa_bò_ở,bò_ở_nông,ở_nông_trại"="Các_em_chú_ý,hãy_nhìn_cô_và,nhìn_cô_và_nói,cô_và_nói_xem,và_nói_xem_các,nói_xem_các_em,xem_các_em_thích,các_em_thích_cái,em_thích_cái_gì,thích_cái_gì_trên,cái_gì_trên_người,gì_trên_người_cô,trên_người_cô_và,người_cô_và_cô,cô_và_cô_sẽ,và_cô_sẽ_nói,cô_sẽ_nói_cho,sẽ_nói_cho_biết,nói_cho_biết_lớn,cho_biết_lớn_lên,biết_lớn_lên_các,lớn_lên_các_em,lên_các_em_làm,các_em_làm_gì,em_thích_mái_tóc,thích_mái_tóc_của,mái_tóc_của_cô,Ôi_Masha_yêu_quí,lớn_lên_em_sẽ,lên_em_sẽ_trở,em_sẽ_trở_thành,sẽ_trở_thành_một,trở_thành_một_thợ,thành_một_thợ_làm,một_thợ_làm_đầu,thợ_làm_đầu_nổi,làm_đầu_nổi_tiếng,đôi_mắt_của_cô,mắt_của_cô_rất,của_cô_rất_đẹp,lớn_lên_em_sẽ,lên_em_sẽ_trở,em_sẽ_trở_thành,sẽ_trở_thành_bác,trở_thành_bác_sỹ,thành_bác_sỹ_nhãn,bác_sỹ_nhãn_khoa,sỹ_nhãn_khoa_giỏi,em_nói_gì_đi,nói_gì_đi_chứ,đừng_có_xịu_mặt,có_xịu_mặt_như,xịu_mặt_như_vậy,em_biết_nói_gì,biết_nói_gì_bây,nói_gì_bây_giờ,Bố_mẹ_em_chắc,mẹ_em_chắc_sẽ,em_chắc_sẽ_buồn,chắc_sẽ_buồn_lắm,sẽ_buồn_lắm_khi,buồn_lắm_khi_biết,lắm_khi_biết_em,khi_biết_em_chỉ,biết_em_chỉ_làm,em_chỉ_làm_một,chỉ_làm_một_công,làm_một_công_nhân,một_công_nhân_vắt,công_nhân_vắt_sữa,nhân_vắt_sữa_bò,vắt_sữa_bò_ở,sữa_bò_ở_nông,bò_ở_nông_trại"
Chỉ cần chọn id và lấy 1 trong 4 trường sau: wordsegmented,2grams,3grams,4grams
Các từ trong mỗi trường được ngăn cách bởi dấu cách trống và các dấu câu (từ ghép thì các âm tiết được nối bang dấu _)
VD.
Vova_thích,Trong_giờ

gồm 2 từ là Vova_thích và Trong_giờ

– Cám_ơn Pêchia, lớn lên em sẽ trở_thành bác_sỹ nhãn_khoa giỏi

gồm các từ là: Cám_ơn,Pêchia,lớn, lên, em, sẽ, trở_thành, bác_sỹ, nhãn_khoa, giỏi

Download : https://drive.google.com/open?id=0B5C6Dqb8T27hNjBkVVhaLWF6ZlE

Đề thi CTDL cũ


========================================== ==========================================

Tuesday, March 15, 2016

Bài tập giữa kỳ cho lớp INPG 13 và LTU 13A kỳ 20152

Bài 1. Xây dựng thuật toán tìm đường đi trong ma trận cho mê cung được mô tả bằng ma trận. 10×10 dùng backtracking.

Chỉ có thể đi ở các ô có giá trị 1 và theo hướng lên, xuống, trái và qua phải

1100000000000001111
1111111110111110000
0001000110101010000
1111000110101010000
1111000010101010000
0010000110101010000
1111000110101010000
1000000110101011111
1111110110101010001
1111010110101010001
1111010010100000001
1111011101111010001
1111110110101110000
0001000111101111111
1111000110101010001
1110000110101010101
1111000110101010111


Bài 2. Xây dựng các phương án tô màu cho đồ thị với các quốc gia được mô tả bằng ma trận. Các màu có thể chọn là 1,2,3,4

Liệu có thể dùng 3 màu tô cho bản đồ trên được không?

Bài 3. Xây dựng thuật toán quay lui giải sodoku 3x3 như dưới.
Có bao nhiêu phương án giải?


Wednesday, February 3, 2016

Bài tập giữa kỳ môn CTDL GT 20152

Bài tập giữa kỳ


Bài 1. Hoàn thiện hàm tìm dãy tăng dài nhất cài đặt dùng đệ quy

VD. dãy 1, 3, 2, 5, 6, 4, 7, 8, 9, 4, 5, 2, 1, 3, 4

Thì dãy tăng dài nhất là 4, 7, 8, 9 với độ dài 4.

Yêu cầu:


  • in ra độ dài và giá trị các phần tử trong dãy tăng
  • trong trường hợp có 2 dãy tăng cùng độ dài thì in ra cả 2.


Bài 2. Cho một mảng số nguyên A và một số s. Hãy xây dựng chương trình tìm hai số a,b không trùng nhau trong A sao cho có tổng đúng bằng s.

VD. A[]={1, 3, 5, 7, 6, 4, 2} và s=10 thì chương trình trả về 3 ,7 hoặc 6, 4

Yêu cầu:
  • Loại bỏ các cặp số bị trùng

Bài 3. Xâu palindrome là xâu đối xứng
VD adbda hoặc abccba

Cho một xâu bất kỳ, hãy tìm và đưa ra xâu con palindrome dài nhất một cách nhanh nhất

VD. abcdcbbcdbccadbca thì xâu con là palindrome dài nhất là dcbbcd

Yêu cầu:
  • Trường hợp có nhiều thì cần in ra tất cả các xâu con palindrome có độ dài dài nhất
  • Thực hiện với thời gian O(n)
Bài 4. Chỉ dùng các phép toán -1 (trừ đi 1) và * 2 (nhân với 2), hãy xây dựng thuật toán biến đổi 1 số nguyên n thành 1 số nguyên m một cách nhanh nhất (dùng ít thao tác nhất)

VD. 4 thành 6 cần 2 thao tác là

(4-1)*2

Bài 5. Biểu diễn đa thức bậc n dùng danh sách liên kết đơn

Hãy viết các hàm cộng, trừ, nhân và chia hai đa thức

Bài 6. Xây dựng thuật toán tìm đường đi trong ma trận cho mê cung được mô tả bằng ma trận 20×20 dùng backtracking.

Đầu vào là ô (1,1) và đầu ra là ô (20,20)
Chỉ có thể đi ở các ô có giá trị 1 và theo hướng lên, xuống, trái và qua phải

1100000000000001111
1111111110111110000
0001000110101010000
1111000110101010000
1111000010101010000
0010000110101010000
1111000110101010000
1000000110101011111
1111110110101010001
1111010110101010001
1111010010100000001
1111011101111010001
1111110110101110000
0001000111101111111
1111000110101010001
1110000110101010101
1111000110101010111

Bài 7. Cho một dãy số nguyên A với số lượng phần tử là n
A[]={5,3,4,7,8,9,2,4,5}
Hãy in các dãy con tăng/giảm với độ dài dãy từ 3 đến n
VD. Với mang A trên thì

Dãy tăng độ dài 3 là: 3,4,7 và 7,8,9 và 2,4,5
Dãy tăng độ dài 4 là: 3,4,7,8 và 4,7,8,9
Dãy tăng độ dài 5 là: 3,4,7,8,9

Bài 8. Cho đầu vào là một danh sách các từ (gồm chữ cái và chữ số, có phân biệt chữ hoa và thường). Hãy viết chương trình nhập và giá trị nguyên n và in ra màn hình các từ chỉ khác nhau đúng n ký tự. Các từ ngắn hơn thì được coi là có dấu cách trống phía sau.

VD từ abc và abcde khác nhau 2 ký tự
abD và abcD khác nhau 2 ký tự

Danh sách các từ này được nhập vào từ file input.txt

Bài 9. Cho ma trận chỉ gồm 1 và 0 được nhập vào từ file.
Hãy in ra màn hình diện tích vùng chứa các số 0 lớn nhất

1111111110111110000
0001000110101010000
1111000110101010000
1111000010101010111
0010000111101010000
1111001110101010000
1000001110111111111
1111110110101010001
1111010110101010001
1111010010101010001

Ví dụ với hình trên thì diện tích lớn nhất là 21

Bài 10. Cho hai danh sách các khoảng liên tục. Hãy viết chương trình trộn hai danh sách này để được một danh sách các khoảng liên tục

Đầu vào:
Arr1 = [3-11, 17-25, 58-73];
Arr2 = [6-18, 40-47];

Đầu ra:
Arr3 = [3-25, 40-47, 58-73];

Chú ý: Các khoảng này đã được sắp theo thứ tự tăng dần cho trước

Bài 11. Cho một mảng chứa toàn số 0 và 1 và một giá trị nguyên k. Tìm đoạn con liên tục chứa nhiều số 1 nhất sau khi lật k bit 0 thành 1.

Ví dụ mảng đầu vào là {1,1,0,0,1,1,1,0,1,1}
k = 1 (chỉ được lật 1 bit 0 thành 1)

Độ dài đoạn lớn nhất là 6 (Nếu ta lật bit 0 tại vị trí chỉ số 7, ta sẽ có đoạn con chứa các bit 1 dài nhất là 6)

Bài 12. Xây dựng hàm kiểm tra xem có thể xáo trộn các ký tự trong 1 xâu ký tự đầu vào sao cho hai ký tự liên tiếp không được giống nhau

Ví dụ

apple >> alpep, so valid
b>> b, valid
bb>> bb, invalid/impossible
aab >> aba, valid
aaaabbcc >> acabacab, valid
etc.

Bài 13. Cho đầu vào là 2 xâu ký tự.

  • Xâu target chỉ chứa các ký tự chữ cái và số
  • xâu pattern chứa các mẫu bao gồm kyws tự chữ cái, chữ số và dâu ? và *

Xây dựng hàm kiểm tra xem xâu target có tuân theo mẫu mô tả bởi xâu pattern hay không.

Dấu ? thay cho 1 ký tự hoặc 1 chữ số
Dấu * thay cho 1 chuỗi ký tự hoặc số (có thể rỗng)

Ví dụ với các trường hợp sau thì hàm trả về giá trị TRUE.

isMatching("abab", "abab")
isMatching("abab", "a**b")
isMatching("ababab", "ab*b")
isMatching("", "*")
isMatching("aaaaaab", "*?*b") 

Sunday, December 6, 2015

Wednesday, October 7, 2015

Bài tập CTDL Cuối kỳ SIE 20151

Bài 5 điểm

Bài 1. Cho một tập văn bản tiếng Anh ( 200 văn bản)

Hãy thống kê tần số các n-gram có trong văn bản (từ 1-gram, 2-gram tới 5-gram) và in ra màn hình các gram có

  • Tần số xuất hiện nhiều nhất trên toàn bộ văn bản (mỗi gram có thể được tính nhiều lần nếu xuất hiện trong cùng 1 văn bản)
  • Xuất hiện trong nhiều văn bản nhất (mỗi gram chỉ được tính xuất hiện trong 1 văn bản 1 lần)
Chú ý: 
1. các gram được tính trong phạm vi 1 câu hoặc một phần của câu và được ngăn cách bằng các dấu câu như . , " : ; ? !

The military previously called the bombing an incident of "collateral damage," a description Campbell's story would seem to support.

thì các phần của câu gồm 

The military previously called the bombing an incident of 
collateral damage
a description Campbell's story would seem to support

2. Có một số ngoại lệ như từ viết tắt và số

We have now learned that on October 3, Afghan forces advised that they were taking fire from enemy positions and asked for air support from U.S. forces," he said Monday

U.S là một gram chứ ko tách thành 2

So far this year, more than 130,000 migrants and refugees have crossed to Europe from the north African coast. More than 2,700 have drowned.

số tính liền chứ không ngăn cách ra


Bài 2.

Cho một tập văn bản tiếng Anh ( 5000 văn bản)


  • Thống kê tần số các n-gram có trong văn bản (từ 1-gram).
  • Hai gram được coi là tương đồng nhau nếu nó xuất hiện cùng nhau trong nhiều văn bản. Hãy nhập vào 2 1-gram và in ra màn hình độ tương đồng của 2 1-gram đó
độ tương đồng của 2 gram đươc tính bằng 

#số văn bản chứa đông thời 2 gram đó / #văn bản chứa 1 trong 2 gram


Chú ý: Ta chỉ xét 1-gram trong bài toán này

Một số yêu cầu thêm như:

  • In ra văn bản chứa 1 hoặc cả 2 gram
  • Chỉ xét các văn bản có độ dài ít hơn 500 từ
  • chỉ xét các văn bản mà gram đó xuất hiện nhiều hơn 2 lần



Bài 3. Cho một tập văn bản tiếng Anh ( 5000 văn bản)
  • Thống kê tần số các n-gram có trong văn bản (từ 1-gram), và số lượng văn bản mà mỗi gram xuất hiện.
  • Độ quan trọng của một gram được tính bằng TF-IDF = (tần số xuất hiện của từ/tổng số từ)*log(tổng số văn bản/số văn bản từ đó xuất hiện). Từ nào có TF-IDF lớn là từ quan trọng.
  • Sắp xếp độ quan trọng của các từ theo TF-IDF và chỉ lấy 30% từ có TF-IDF quan trọng nhất.  

FILE văn bản:
https://drive.google.com/file/d/0B5nb3v94xY_WaV9PejV0MUx6dDg/view?usp=sharing

Wednesday, September 16, 2015

Bài tập giữa kỳ CTDLGT SIE 20151

Loại bài 1 điểm

Bài 1. Cho 2 số nguyên lớn (số lượng chữ số từ 10 tới 1000). Hãy viết hàm thực hiện các phép toán cơ bản như cộng, trừ, nhân, chia hai số nguyên này.

VD. một số có thể là 123454124545887154956584454878544648454


Bài 2. Một đa thức bậc n có thể được biểu diễn bằng một danh sách liên kết đơn

P(n) = a0 + a1*n + a2*x^2 + .. + an*x^n

Hãy viết các hàm thực hiện việc cộng, trừ và nhân hai đa thức bậc n là P(n) và Q(n).
Chú ý. Các đa thức này cần được biểu diễn bằng danh sách liên kết đơn

Bài 3. Đầu vào là một xâu ký tự
Hãy tìm và đưa ra màn hình các ký tự cơ bản để tạo nên xâu ban đầu

VD. Xâu đầu vào là abbcacfcba
Thì các ký tự cơ bản để tạo ra xâu là abcf

Bài 4. Cho một danh sách số nguyên và một giá trị x. Hãy xây dựng chương trình tìm và in ra màn hình các phần tử chênh lệch với x giá trị k. một cách nhanh nhất.

VD. Danh sách ban đầu 1,2,5,3,7,4
với x = 3 và k =1 thì chương trình sẽ in ra 4 và 5

Loại bài 2 điểm

Bài 1. Cho một dãy số nguyên, hãy đưa ra các khoảng liên tục trong dãy
VD. Dãy đầu vào là 1,8,9,2,3,11,5,7,12
Thì đầu ra là 1-3, 5, 7-9, 11-12

Monday, April 20, 2015

Bài tập lớn CTDLGT cho lớp VUW-IT

Bài 1. (Phát triển từ bài tìm danh từ riêng) Tìm xem danh từ riêng nào được đề cập đến nhiều nhất trong một tập văn bản ( khoảng 50-100 văn bản).

  • Các danh từ riêng bao gồm cả danh từ nối và không được nối.

Từ đó đưa ra xem danh từ nào đang là hot trend. (các danh từ được đề cập đến nhiều nhất trong nhiều văn bản)

  • Chú ý việc các danh từ viết tắt (cùng xuất hiện trong văn bản)

Tập văn bản (50-100) văn bản do sinh viên lấy từ các nguồn như BBC.com hoặc CNNNews.com hoặc VOANews.com

Có thể sử dụng chung tập dữ liệu nếu cùng làm một bài (Miễn là không dùng chung code :D )

Bài 2. Tìm tập danh từ riêng theo chủ đề

Đầu vào là một tập văn bản tiếng Anh thuộc nhiều chủ đề (>=3 chủ đề), mỗi chủ đề khoảng (10-20 văn bản). Các chủ đề như
  • Thể thao
  • Chính trị
  • Khoa học công nghệ
  • Kinh doanh
Với mỗi một chủ đề ta tìm các danh từ riêng và đưa ra tập danh từ riêng đăc jtrung cho từng chủ đề dựa trên tần số xuất hiện.

Danh từ riêng nào xuất hiện đồng thời trong nhiều chủ đề khác nhau ?
Danh từ đó có đặc điểm gì ?


Tuesday, March 17, 2015

Bài tập giữa kỳ cho lớp VUW-IT 20142

Bài 1. Thống kê tần số xuất hiện và vị trí xuất hiện (theo câu hoặc dòng) của các danh từ riêng trong văn văn tiếng Anh.
Chương trình đọc vào 1 trong 5 file văn bản đính kèm, hiển thị ra các danh từ riêng trong văn bản đó.
Chương trình cho phép người dùng nhập vào một danh từ riêng, in ra màn hình kết quả:

  • Tần số xuất hiện
  • Vị trí xuất hiện
Nếu danh từ đó có xuất hiện trong văn bản đã cho.
Chú ý: Các danh từ riêng nếu đứng cạnh nhau thì cần được nối lại với nhau

Bài 2. Thống kê tần số xuất hiện và vị trí xuất hiện (theo câu hoặc dòng) của các từ trong văn văn tiếng Anh.
Chương trình đọc vào 1 trong 5 file văn bản đính kèm, hiển thị ra :

  • Các từ
  • Tần số xuất hiện
  • Độ dài từ và tần số của các từ theo độ dài 9độ dài của 1 từ là số ký tự trong từ đó)
Chương trình cho phép người dùng nhập vào một từ, in ra màn hình kết quả:

  • Tần số xuất hiện
  • Vị trí xuất hiện
Nếu từ đó có xuất hiện trong văn bản đã cho.
Có lựa chọn thống kê phân loại chữ hoa/thường hoặc không phân loại hoa/thường.

Chú ý. Các từ trong văn bản được ngăn cách nhau bởi dấu cách trống.

Bài 3. Cho một văn bản và một tập từ điển tiếng Anh. Kiểm tra xem trong văn bản tiếng anh đó có bao nhiêu từ lỗi chính tả (bỏ qua những từ có chữ hoa, hoặc chữ số).
Những từ lỗi là những từ không có trong từ điển.

Nếu đề xuất được phương án sửa từ sai sẽ được cộng điểm.

Tài liệu download tại

Sunday, February 22, 2015

Bài tập lớn CTDL & GT cho lớp chiều thứ 2 (tiết 1-4)

Bài tập lớn CTDL & GT cho lớp chiều thứ 2 (tiết 1-4)


Yêu cầu chung:

  • Sinh viên tự đề xuất thuật toán dựa trên yêu cầu của đề bài
  • Tự chọn CTDL phù hợp và giải thích vì sao mình chọn CTDL đó
  • Đánh giá hiệu quả về thời gian và bộ nhớ của thuật toán 
Đây là các đề bài xuất phát từ yêu cầu thực tế, rất khó có thuật toán cho kết quả chính xác 100% (Điểm đánh giá sẽ ưu tiên các thuật toán nào cho kết quả tốt hơn)

Dữ liệu đầu vào:

Dữ liệu cho tất cả cacsc bài tập ở dưới được Download theo link sau: https://www.dropbox.com/s/k7y57sqsy5qzrkl/TechCrunch_Files.rar?dl=0
  • Các tập dữ liệu đầu vào được lấy từ các bài viết mới gần đây trên trang công nghệ TechCrunch, và ở dạng ngôn ngữ tiếng Anh.
  • Các bài viết được tổ chức thành từng file riêng theo dạng 0001.txt, 0002.txt,... (có khoảng gần 5K bài viết)
  • Format của mỗi bài viết gồm
    • Dòng đầu tiên là tiêu đề : title
    • Dòng tiếp là tác giả: author
    • Dòng tiếp là ngày được xuất bản : publish date
    • Các dòng tiếp theo là nội dung bài viết 
  • Trong bài viết có nhiều ngoại lệ (exception), sinh viên nên tự phát hiện và loại bỏ để tăng độ chính xác (VD. các thông tin phụ ở cuối bài viết) 

Dữ liệu đầu ra:

  • Sinh viên nên tổ chức dữ liệu đầu ra dưới dạng file văn bản để dễ theo dõi

Sinh viên có thể dùng các hệ quản trị CSDL đễ hỗ trợ tổ chức và lưu trữ dữ liệu (tuy nhiên điều này không được khuyến khích)

Bài 1. Phát hiện các danh từ riêng, tên riêng trong các văn bản


Sắp xếp các danh từ này theo tần số xuất hiện trên toàn bộ tập văn bản, và trên số lượng văn bản mà nó xuất hiện

Hai cặp danh từ được coi là cùng xuất hiện nếu chúng xuất hiện gần nhau (trong khoảng cách 2-3 câu)

Những danh từ nào có tần số xuất hiện nhiều nhất?

  • Trên toàn bộ tập văn bản (mỗi từ được tính nhiều lần nếu xuất hiện nhiều lần ở cùng 1 văn bản)
  • Trên nhiều văn bản nhất (mỗi từ chỉ được tính 1 lần xuất hiện trong 1 văn bản)

Cặp danh từ nào được xuất hiện nhiều nhất?

VD với văn bản

A recent article in TechCrunch characterized nascent upstarts in the restaurant industry as wide-eyed idealists with little reality of the harsh, high-touch operating environment in which they operate. Having worked in the tech, food and health worlds for most of my career, I believe the article misrepresented the significant progress being made across the industry. On almost every front within hospitality — be it point of sale, loyalty, delivery or sourcing — change is in the air.

For all the talk of the Aloha and MICROS point of sale (POS) systems dominanting in restaurants, a bevy of newcomers have been making inroads. Square, with its slick reader and now retail POS terminal, carries the most gravitas among the mobile POS companies for good reason: it inks deals with large retailers: Starbucks in 2012, then Whole Foods, Uniqlo and Godiva in 2014. Granted, none of these establishments switched over an entire store to Square, but these relationships suggest large retailers will embrace new technology.

Danh từ riêng được in đậm
  • là các từ có ít nhất 1 chữ in hoa
  • Không chấp nhận các từ ở đầu câu hoặc đầu đoạn
  • Các từ hoa liền nhau (ngăn cách bởi 1 dấu cách trống) nên nối thành 1 từ dài
  • Các từ hoa liền nhau ngăn cách từ >= 2 dấu cách trống thì nên tách riêng ra.
  • Nếu mà phân biệt được các từ viết tắt thì càng tốt (các từ mà tất cả các ký tự đều viết hoa)
Cặp danh từ trong phạm vi 2 câu là
  • {Aloha - MICROS} - POS
  • POS - {Starbucks - Whole Foods - Uniqlo - Godiva} 
  • {Starbucks - Whole Foods - Uniqlo - Godiva} - Square

Bài 2. Thống kê tên thương hiệu (sản phẩm)/ công ty được đề cập trong bài báo

Với các danh từ riêng trong bài báo ta cần phân ra được thành

  • Tên địa điểm, vị trí
  • Tên người
  • Tên sản phẩm/ tên công ty
Làm sao phân biệt được tên địa điểm, tên người với các tên riêng khác ?

  • Tên địa điểm, vị trí, thời gian: gần đó thường có các giới từ như at, in, on
  • Tên người: gần đó thường có sở hữu cách:'s hoặc of
  • Tên sản phẩm/ tên công ty:
Nếu không làm được ==> tự xây dựng từ điển tên công ty/ sản phẩm bằng tay (không khải thi cho lắm nếu chạy trên dữ liệu thực tế - khoảng vài tỷ bài viết)

Công ty / sản phẩm nào được đề cập đến nhiều nhất ?

Bài 3. sản phẩm nào là của công ty nào được đề cập trong các bài báo?


VD. Apple : iphone, ipad,....

Làm thế nào biết được sản phẩm nào của công ty nào?

  • Phát hiện tên công ty
  • Tên sản phẩm
  • Thường có các từ đặc trưng để kết nối như: a product of, a service of,....

Bài 4. Tìm các bài viết đánh giá tốt hoặc xấu về một sản phẩm/ thương hiệu của công ty

  • Phát hiện ra các tên công ty, tên sản phẩm
  • Các tính từ đánh giá như : good, bad, worse,, (sinh viên tự xây dựng từ điển) 
Các tính từ này phải nằm gần các câu chứa các danh từ thương hiệu (trong phạm vi khoảng 2-3 câu)

Bài 5. Hai văn bản được coi là có liên quan đến nhau nếu có tập danh từ riêng trùng nhau nhiều

  • Tìm các tập danh từ riêng của 2 văn bản
  • Xác định tập danh từ riêng trùng nhau của 2 văn bản
  • Quyết định xem 2 văn bản có liên quan đến nhau hay không dựa trên ngưỡng (số lượng từ trùng nhau trên tổng số danh từ riêng của cả 2 văn bản). Ngưỡng này do sinh viên tự đề xuất!
Với 1 bài đang đọc, hãy đưa ra danh sách các bài viết có liên quan (được sắp xếp theo thứ tự độ liên quan giảm dần)

Để đảm bảo yêu cầu về thời gian xử lý, sinh viên có thể cần tính trước độ liên quan của các bài viết và đưa vào file tạm.

Bài 6. n-gram là các cụm từ liên tiếp nhau (ở đây ta quan tâm tới 2-gram và 3-gram)

Ta chỉ xét các n-gram trong phạm vi một bộ phận câu (bị ngăn cách bởi các dấu câu như  dấu ! dấu . dấu : dấu - ) 

Dấu , được bỏ qua

VD. Với văn bản 

I believe the article misrepresented the significant progress being made across the industry. On almost every front within hospitality — be it point of sale, loyalty, delivery or sourcing — change is in the air.

Ta có các bộ phận câu như

  • I believe the article misrepresented the significant progress being made across the industry
  • On almost every front within hospitality
  • be it point of sale, loyalty, delivery or sourcing
  • change is in the air
Với câu 
  • change is in the air
Ta có các 3-gram là:
  1. change is in
  2. is in the
  3. in the air

Hai văn bản liên quan đến nhau (thường là trùng nhau hoặc cùng một chủ đề) nếu có số lượng n-gram trùng nhau nhiều.

Hãy tìm các văn bản trùng/ có liên quan đến văn bản hiện tại dựa trên 3-gram (hoặc 2-gram)
Ngưỡng trùng do sinh viên tự đề xuất.

Monday, August 25, 2014

Điểm cuối kỳ (có cộng) CTDLGT 20133

Các bạn có thắc mắc gì thì email lại nhé!

Bạn Trần Xuân Tới 20102348 có đi thi cuối kỳ nhưng không có bài là thế nào? Bạn nào biết bạn ấy thì hỏi giùm nhé!








Wednesday, August 13, 2014

Lich dạy kỳ mới

7560975609IT3010Cấu trúc dữ liệu và giải thuậtCơ điện tử-K56SLT+BT1120Đang xếp TKBViện Công nghệ Thông tin và Truyền thôngĐại học đại tràPhòng Đào tạo Đại họcViện Công nghệ Thông tin và Truyền thông1,615,616,2-9,TC-401;2,314,316,2-9,TC-401;3,511,513,2-9,TC-401;144
7477374773IT1110Tin học đại cươngĐiện tử 5,6,7,8-K58CLT+BT1180Đang xếp TKBTNViện Công nghệ Thông tin và Truyền thôngĐại học đại tràPhòng Đào tạo Đại họcViện Công nghệ Thông tin và Truyền thông1,621,624,2-9,12-19,D5-103;234

Lớp CTDLGT sắp bị hủy do có ít người đăng ký, bạn nào đã đăng ký rồi thì nên chủ động hủy lớp nhé!