Showing posts with label cấu trúc dữ liệu và giải thuật. Show all posts
Showing posts with label cấu trúc dữ liệu và giải thuật. Show all posts

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") 

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ì ?


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é!

Monday, August 11, 2014

Lịch bảo vệ BTL CTDLGT 20133

Thời gian :

  • Chiều thứ 5 sau 4h chiều
  • Sáng thứ 3 (19/8): 11h sáng ->12h
  • Sáng thứ 6 (22/8): 11h sáng ->12h
  • Extra : Chiều thứ 6 (22/8): 3h30 chiều ->5h (contact qua FB trước )

Địa điểm: 602 B1

Các bạn bảo vệ nhớ mang hoặc chuẩn bị máy, chương trình để chạy được luôn, và giấy để demo nếu cần :)

Wednesday, August 6, 2014

Lịch thi CTDLGT 20133


73636 IT3010 Cấu trúc dữ liệu và giải thuật Thứ năm 14/08/14 Kíp 2 Nhóm 1 70 D3-301 5
73636 IT3010 Cấu trúc dữ liệu và giải thuật Thứ năm 14/08/14 Kíp 2 Nhóm 2 70 D3-401 5

Thursday, July 31, 2014

Đề thi cũ CTDL 2013

Đề thi cũ môn CTDL cho bạn nào muốn tham khảo kỳ 1,2,3 năm 2013

Kỳ 1 - 2013 

Giữa kỳ: http://1drv.ms/1zyzuys

Cuối kỳ: http://1drv.ms/1zyzyOP

Kỳ 2 - 2013

Giữa kỳ: http://1drv.ms/1qMM38X

Cuối kỳ: http://1drv.ms/1qMM50u

Kỳ 3 - 2013

Giữa kỳ: http://1drv.ms/1zyzL4E


Wednesday, July 30, 2014

Một số bài cho hai bạn không kiểm tra giữa kỳ

Bài 1. Tìm số phòng họp nhỏ nhất cho các cuộc họp


Đầu vào: Danh sách các cuộc họp với thời điểm bắt đầu và kết thúc
struct meeting
{
int start, end;//thời điểm bắt đầu và kết thúc
}
Đầu ra: đưa ra số phòng ít nhất cần dùng để đảm bảo không cuộc họp trùng giờ được tổ chức cùng phòng

int minNoRoom(struct meeting A[], int n)

trong đó A là mảng chứa danh sách các cuộc họp và n là số lượng phần tử

Chú ý: Các cuộc họp này đã được xếp theo thứ tự tăng dần về thời điểm bắt đầu

Bài 2. Kiểm tra xem hai xâu có phải là bị biến đổi bởi phép xoay hay không


Đầu vào: hai xâu ký tự có cùng độ dài
Đầu ra: nếu hai xâu được tạo ra bởi phép xoay thì trả về là true, ngược lại trả về là false

int checkIsRotation(char *s1, char *s2)

VD.
S1="amazon" S2="azonam" return true
S1="quality" S2="lityqua" return false

Chú ý: Bạn có thể dùng các hàm có sẵn của thư viện string.h

Bài 3. Viết hàm tìm và trả về nút lá sâu nhất trên cây nhị phân


struct BNODE deepestNode(struct BNODE *root)

trong trường hợp có nhiều nút thì chỉ cần trả về 1 nút

Hạn nộp: Thứ 2 tuần tới (4/8/2014)
Mang máy và chương trình tới lớp để bảo vệ!


Wednesday, July 9, 2014

Bài tập lớn CTDLGT học kỳ hè 20133

Một số BTL cho kỳ hè 2013

Bài 1. Thống kê từ file log


Dữ liệu log về quảng cáo trong 1h được ghi ra các file log, mỗi trường được ngăn cách nhau bởi dấu tab (\t)
Nội dung các trường theo thứ tự

0 time create
1 browser code
2 browser version
3 os code
4 os version
5 device code
6 bannerId
7 ip
8 geoId
9 domain
10 path
11 ref url
12 click or view
13 cookie create time
14 guid
15 appid
16 sdk version
17 zoneId
18 campaign id
21 screen width
22 screen height
24 manufactory id

Cần thống kê:

  • Số lượng thiết bị (Device) (Các thiết bị không xác định sẽ được gom lại thành 1 nhóm)
  • Thống kê Pageview theo domain và theo từng page 


Dữ liệu các bạn có thể tài về từ

https://drive.google.com/folderview?id=0B5nb3v94xY_WSFFxMmRiQ1hDN3M&usp=sharing

Bài 2. Cài đặt thuật toán Seamcarving dùng để resize lại ảnh


Mô tả thuật toán này các bạn có thể tìm tại
https://drive.google.com/folderview?id=0B5nb3v94xY_WSFFxMmRiQ1hDN3M&usp=sharing

Với ảnh màu RGB bạn có thể chọn một trong những cách sau đây


  • Chuyển về ảnh mức xám
  • Xử lý các thành phần màu RAG như 1 số nguyên 3 Byte
  • xử lý từng thành phần màu R,G,B riêng rẽ

Bài 3. Xây dựng gợi ý khi gõ văn bản



Khi gõ một hoặc một số ký tự, chương trình sẽ tự động suggest nốt phần còn lại của từ

Ý tưởng: Dùng prefix Tree

Yêu cầu: Xây dựng prefix tree và áp dụng để suggest một số từ thông dụng cho từ điển tiếng Anh
(Từ điển có thể tải về từ https://drive.google.com/folderview?id=0B5nb3v94xY_WSFFxMmRiQ1hDN3M&usp=sharing), file mword10.zip, dùng file COMMON.TXT hoặc COMPOUND.TXT


Bài 4. Xây dựng thuật toán sinh màn chơi SODOKU theo các mức khó

Cài đặt thuật toán mô tả trong bài báo sau

http://zhangroup.aporc.org/images/files/Paper_3485.pdf

Tham khảo thêm tại


Bài 5. Xây dựng chương trình tự động suggest và sửa lỗi chính tả (tiếng Anh)

Với một văn bản tiếng Anh được nhập từ bàn phím, hoặc file, chương trình sẽ làm những việc sau:


  1. Phát hiện những từ sai chính tả (VD: Đầu dòng, đoạn phải viết hoa, những từ ko có trong từ điển), và đánh dấu bằng màu khác hoặc tô đậm
  2. Với những từ không có trong từ điển, chương trình có thể gợi ý những cách sửa (đưa ra 1 vài gợi ý dựa trên thuật toán tìm khoảng cách sửa đổi gần nhất của 2 xâu - Levenshtein Edit Distance)


(Từ điển có thể tải về từ https://drive.google.com/folderview?id=0B5nb3v94xY_WSFFxMmRiQ1hDN3M&usp=sharing), file mword10.zip, dùng file COMMON.TXT

Tham khảo

Bài 6: Thuật toán sinh mê cung



Yêu cầu: Sinh mê cung kích thước nxn bất kỳ
Đầu ra: Vẽ minh họa mê cũng sinh được (với trường hợp n nhỏ thì hiển thị trên màn hình, còn n lớn có thể ghi ra file), dùng các ký hiệu VD. _, | để minh họa

Tham khảo


Demo


Bài 7: Đưa ra từ gợi ý dựa trên n-gram (+2 điểm)


http://en.wikipedia.org/wiki/N-gram
n-gram là chuỗi n từ được đi liền với nhau (có thể có nghĩa hoặc không có nghĩa)

Ví dụ: với xâu "In the fields of computational linguistics and probability, an n-gram is a contiguous sequence of n items from a given sequence of text or speech. The items can be phonemes, syllables, letters, words or base pairs according to the application. The n-grams typically are collected from a text or speech corpus."

1-gram là các từ đứng rời In, the, fields, of, computational,....
2-gram là các cặp 2 từ liền nhau: In the, the fields, fields of, of computational,....
3-gram là các nhóm 3 từ liền nhau: In the fields, the fields of, fields of computational,....

tương từ với 4-gram, 5-gram

Đầu vào: là tập văn bản reuters21578 http://www.daviddlewis.com/resources/testcollections/reuters21578/
format của các văn bản này các bạn xem thêm tại: http://www.daviddlewis.com/resources/testcollections/reuters21578/readme.txt

Yêu cầu:

  1. Lọc lấy tiêu đề và nội dung của các bài viết
  2. Tách và sinh ra các n-gram (1,2,3,4,5-gram)
  3. Thống kê tần số xuất hiện của các gram (không phân biệt hoa thường, và có phân biệt hoa thường)
  4. Gợi ý từ dựa trên các n-gram thống kê được
VD. Với dữ liệu mẫu là 3 gram ở trên thì khi người dùng gõ vào từ "In" ta có thể gợi ý các cặp là "In the", "In the fields".

Trong thực tế thì ta có thể chọn các cặp n-gram có tần số xuất hiện lớn nhất để đưa ra trước, nhưng vì tần số xuất hiện này còn tỉ lệ với độ dài gram. Do đó việc đưa ra các từ gợi ý dựa trên (tần số xuất hiện của gram)/(tổng số các n-gram).

Ví dụ. Có 2500 2-gram và 1000 3-gram

cụm 2-gram "In the" có tần số xuất hiện 15 lần thì tỉ lệ của nó sẽ là 15/2500
cụm 3-gram "In the fields" có tần số xuất hiện 7 lần thì tỉ lệ là 7/1000

Vậy khi đưa ra gợi ý ta sẽ đưa ra cụm "In the fields" trước cụm "In the"

Chú ý: Các cụm gram này dừng tại các dấu câu.

VD. câu "In the fields of computational linguistics and probability, an n-gram is a contiguous sequence of n items from a given sequence of text or speech.

được tách thành 2 phần

"In the fields of computational linguistics and probability"
"an n-gram is a contiguous sequence of n items from a given sequence of text or speech"

để đảm bảo các n-gram không chứa các dấu như , . : ? ! ;

Tham khảo thêm tại
  • http://en.wikipedia.org/wiki/N-gram
  • http://nlpwp.org/book/chap-ngrams.xhtml
  • http://www.ngrams.info/
  • https://drive.google.com/folderview?id=0B5nb3v94xY_WSFFxMmRiQ1hDN3M&usp=sharing

Bài 8: Xây dựng chương trình kiểm tra một biểu thức dạng trung tố có hợp lệ


Một biểu thức dạng trung tố

  • Toán tử có thể 1 ngôi hoặc 2 ngôi, chỉ gồm 1 ký tự
  • Toán hạng: nếu là số thì có thể có 1 hoặc nhiều chữ số được viết liên nhau, nếu là chữ cái thì chỉ có 1 ký tự
  • Các toán tử và toán hạng được viết liền nhau, giữa chúng không có khoảng cách trống
  • Chỉ có một loại dấu ngoặc tròn
Ví dụ một số biểu thức hợp lệ

A=a+345-23*12+(a-34/2)
B=b+(45+a/3+(52-4*a))
C=|45+a*(2-7/b)|/23*a

Hãy viết chương trình kiểm tra biểu thwucs hợp lệ, với biểu thức có thể được nhập vào từ file hoặc từ bàn phím

Tuesday, March 18, 2014

Hướng dẫn tạo và chia sẻ thư mục dùng Google Drive

Trước hết bạn phải đăng ký một tài khoản Gmail để dùng Google Drive (nếu chưa có bạn có thể vào mail.google.com để đăng ký)

1. Vào Google Drive qua giao diện web và tạo thư mục chia sẻ

Trên giao diện quản lý email của Gmail, bạn click vào hình như trên để truy cập vào Google Drive

Nếu đây là lần đầu tiên bạn dùng Gogole Drive thì có thể hộp thoại này sẽ xuất hiện, bạn click vào Not now, maybe later

Trong giao diện của Google Drive, bạn nhấn nút Create

Bạn chọn tạo thư mục mới - Folder

Tùy theo yêu cầu mà bạn đặt tên cho phù hợp, Ví dụ các bạn học lớp Cao đẳng chiều thứ 2, kỳ 20132 thì đặt tên thư mục là DSA_CD20132_Hoten_SHSV: Họ tên tốt nhất là viết liền, không dấu

Nếu bạn tạo đúng thì bạn sẽ có một thư mục như hình (đây được gọi là thư mục gốc, sẵn sàng để chia sẻ)

2. Chia sẻ thư mục với email nguyenduyhiep@gmail.com


Click chuột phải trên thư mục gốc của bạn và vào phần Share - chia sẻ

Trong phần invite people của chia sẻ, điền vào địa chỉ email nguyenduyhiep@gmail.com

Nếu bạn làm thành công thì sẽ có tên người thứ 2 có thể truy cập vào thư mục gốc của bạn là Hiep Nguyen (Chú ý là phải chờ người này Accept thì thư mục mới coi là gửi thành công!)

Chú ý: Bạn chỉ tạo và chia sẻ thư mục này một lần duy nhất!

3. Tạo và nộp các bài tập tuần

Để nộp các bài tập tuần bạn tạo các thư mục bài tập tuần tương ứng trong thư mục gốc,
ví dụ thư mục cho bài tập tuần 1 là baitaptuan1

Bạn nhấn vào nút như hình để tạo thêm một thư mục con trong thư mục gốc
(Hoặc chọn thư mục gốc và nhấn nút CREATE)

Thêm một thư mục mới cho bài tập tuần

Đặt tên thư mục theo tuần tương ứng, VD baitaptuan1

Thư mục baitaptuan1 sau khi tạo xong sẽ là thư mục con của thư mục gốc
(Thư mục này sẽ được tự động chia sẻ, bạn không cần chia sẻ lại nữa)

Để nộp các bài tập của tuần đó, bạn chọn thư mục tuần và vào phần Upload

Chọn upload Files

Sau khi chọn xong các file bài làm của tuần đó, bạn nhấn nút Upload and share

File đang được tải lên

Sau khi upload xong, bạn sẽ thấy file đó được hiển thị trong thư mục bài tập tuần (ở đây là baitaptuan1)

Tương tự bạn có thể tạo và nộp cho các bài tập tuần khác



Tuesday, January 21, 2014

Tổng hợp tài liệu cấu trúc dữ liệu và giải thuật - DSA

Slide bài giảng : https://www.mediafire.com/?s5jzjccb2aaja0c
Đề thi cũ: https://drive.google.com/file/d/0B5nb3v94xY_WSm0yQ2RNMHlCaHM/edit?usp=sharing

Đề tài bài tập lớn


1. Xây dựng chương trình tìm kiếm full text search

Đầu vào: một tập văn bản (>=100) tiếng Anh lấy từ trên báo mạng (cnn, bbc, voa,...), người sử dụng sẽ nhập vào 1 (hoặc 1 vài từ tiếng anh)
Đầu ra: tập các văn bản chứa các cụm từ mà người dùng nhập vào (văn bản nào có tần số xuất hiện nhiều hơn sẽ được xếp ở trên) (Không phân biệt hoa, thường)

Gợi ý: Các công việc cần làm là
  • Tách từ 
  • Index các văn bản dựa trên các từ 
  • Tìm kiếm các văn bản xuất hiện từ đã nhập
  • Đánh giá điểm và xếp hạng các kết quả dựa trên tần số xuất hiện của các từ
2. Cài đặt cấu trúc B+ tree để hỗ trợ tìm kiếm theo khoảng
Đầu vào: một file văn bản chứa khoảng 1000000 số thực được sinh ngẫu nhiên (không trùng nhau), và 2 giá trị x<=y
Đầu ra: đưa ra các số nguyên trong danh sách thỏa mãn x<=a1<=a2<=..<=an<=y

3. Xây dựng chương trình ôn thi trắc nghiệm cho môn học THDC hoặc CTDLGT
Đầu vào: số lượng câu hỏi (khoảng 10 câu)
Đầu ra: các câu hỏi trắc nghiệm cho người dùng trả lời với thời gian cho trước (khoảng 60-90s/câu)
Đánh giá kết quả trả lời của người dùng.

Đề trắc nghiệm tự tìm trên mạng hoặc trong sách THDC của trường

4. Xây dựng chương trình lấy thông tin giá vàng và giá chứng khoán, tỉ giá hối đoái trên thị trường một cách tự động
Yêu cầu: chương trình tự động lấy giá vàng, giá chứng khoán và tỉ giá hối đoái trên thị trường với khoảng thời gian cập nhật khoảng 5 phút/lần, sau đó hiển thị ra màn hình

Các tỷ giá cũ phải được lưu trữ dùng CSDL hoặc file text (lưu ít nhất lịch sử giá trong vòng 1 tháng)

5. Xây dựng chương trình tìm và download các thông tin về các hotdeal, coupon, giảm giá của các cửa hàng (ẩm thực, hoặc điện tử hoặc điện thoại) từ đó đưa ra danh sách các cửa hàng giảm giá theo yêu cầu tìm kiếm của người dùng.

Ví dụ: người dùng cần tìm quán ăn trong phạm vi hồ Hoàn kiếm thì chương trình sẽ đưa ra danh sách các cửa hàng ăn uống đang có khuyến mại trong  phạm vi này.
Dùng Google map để hỗ trợ tìm vị trí!

Danh sách nộp bài tập tuần