444444444.Info Make offer
4444444444.Info Make offer
5555555555.Info Make offer
55584555.Com Make offer
55594555.Com Make offer
6864686.Com Make offer
77746777.Com Make offer
77748777.Com Make offer
77749777.Com Make offer
77754777.Com Make offer
8820868.Com Make offer
8830868.Com Make offer
8844868.Com Make offer
8845868.Com Make offer
8849868.Com Make offer
8850868.Com Make offer
8854868.Com Make offer
8860868.Com Make offer
8864868.Com Make offer
8870868.Com Make offer
8890868.Com Make offer
8894868.Com Make offer
9499.Info Make offer
Hey Bro, I'm a domainer! I have just list domain for sale at HERE , You can Search and offer all my domain on Godaddy.com, Afternic.com, or Sedo.com. Thanks !
Diễn đàn sinh viên công nghệ thông tin, chia sẻ, giao lưu, học hỏi. Kết nối ... Những ngôn ngữ cơ bản mà bạn cần phải nắm nếu muốn thành 1 lập trình viên ...VuaTenMien.Com
Thứ Ba, 26 tháng 4, 2016
Premium domain for sale on godaddy
PakistanTravel.net , Offer here !
BelarusTravel.net, Offer here !
CzechTravel.net Offer here
HungaryTravel.net Offer here
CameroonTravel.net Offer here
VisitTennessee.Net Offer here
OfferDomain.net Offer here
88890888.net Offer here
88870888.net Offer here
Lowescredit.Net Offer here
Jetstarairways.Net Offer here
Unemploymentloans.Net Offer here
Unsecureloans.Net Offer here
Mortgagecaculator.Net Offer here
Computerrecovery.Net Offer here
Driverecovery.Net Offer here
Independentstudy.Net Offer here
Pneumoniatreatment.Net Offer here
EuDomain.net Offer here
Dnbest.Net Offer here
Dndiscount.Net Offer here
Dnbusiness.Net Offer here
Dnhelp.Net Offer here
Dnpress.Net Offer here
Dninvesting.Net Offer here
Dncash.Net Offer here
Dnjobs.Net Offer here
Dntraffic.Net Offer here
Dnbig.Net Offer here
Dnlegal.Net Offer here
businessinsure.info Offer here
livebusiness.info Offer here
lowland.info Offer here
1gas.net Offer here
4ski.net Offer here
1phone.net Offer here
ejeans.net Offer here
eairline.net Offer here
1university.net Offer here
1airline.net Offer here
1MuaSam.com Offer here
Latvias.com Offer here
Porker.info Offer here
1DienThoai.com Offer here
1XeHoi.com Offer here
1Scholarships.com Offer here
Vnqt.net Offer here
Vndt.net Offer here
Khvn.net Offer here
Ckvn.net Offer here
Bhvn.net Offer here
Vnfc.net Offer here
CNTT.org Offer here
BelarusTravel.net, Offer here !
CzechTravel.net Offer here
HungaryTravel.net Offer here
CameroonTravel.net Offer here
VisitTennessee.Net Offer here
OfferDomain.net Offer here
88890888.net Offer here
88870888.net Offer here
Lowescredit.Net Offer here
Jetstarairways.Net Offer here
Unemploymentloans.Net Offer here
Unsecureloans.Net Offer here
Mortgagecaculator.Net Offer here
Computerrecovery.Net Offer here
Driverecovery.Net Offer here
Independentstudy.Net Offer here
Pneumoniatreatment.Net Offer here
EuDomain.net Offer here
Dnbest.Net Offer here
Dndiscount.Net Offer here
Dnbusiness.Net Offer here
Dnhelp.Net Offer here
Dnpress.Net Offer here
Dninvesting.Net Offer here
Dncash.Net Offer here
Dnjobs.Net Offer here
Dntraffic.Net Offer here
Dnbig.Net Offer here
Dnlegal.Net Offer here
businessinsure.info Offer here
livebusiness.info Offer here
lowland.info Offer here
1gas.net Offer here
4ski.net Offer here
1phone.net Offer here
ejeans.net Offer here
eairline.net Offer here
1university.net Offer here
1airline.net Offer here
1MuaSam.com Offer here
Latvias.com Offer here
Porker.info Offer here
1DienThoai.com Offer here
1XeHoi.com Offer here
1Scholarships.com Offer here
Vnqt.net Offer here
Vndt.net Offer here
Khvn.net Offer here
Ckvn.net Offer here
Bhvn.net Offer here
Vnfc.net Offer here
CNTT.org Offer here
One word beautiful domain for sale on godaddy
Accessed.Info
Considers.Info
Counted.Info
Responded.Info
Enters.Info
Admitted.Info
Configured.Info
Avoiding.Info
Executed.Info
Permitted.Info
Flashers.info
luxuryautos.info
examining.info
aimed.info
Chinatourist.info
Considers.Info
Counted.Info
Responded.Info
Enters.Info
Admitted.Info
Configured.Info
Avoiding.Info
Executed.Info
Permitted.Info
Flashers.info
luxuryautos.info
examining.info
aimed.info
Chinatourist.info
Chủ Nhật, 24 tháng 4, 2016
Travel domain for sale on Godaddy
YaoundeTravel.Com , make offer
TravelRabat.Com , Make offer
AlgiersTravel.Com , Make offer
TravelLuanda.Com , Make offer
TravelPretoria.Com, Make offer
TravelIslamabad.Com, Make offer
TravelAnkara.Com, Make offer
BrazzavilleTravel.Com, Make offer
TravelPyongyang.Com, Make offer
1thethao.Com, Make offer
1BaoHiem.Com, Make offer
1CongNghe.Com, Make offer
1Thoitrang.Com, Make offer
1didong.com, Make offer
1thietke.com, Make offer
1Attraction.Com, Make offer
1chief.Com, Make offer
1cloth.Com, Make offer
1cream.Com, Make offer
1yoke.Com, Make offer
1fiction.Com, Make offer
VietnamShows.Com, Make offer
NormalDomain.Com, Make offer
HelpfulDomain.Com, Make offer
AustraliaScene.Com, Make offer
TopicDomain.Com, Make offer
ThailandScene.Com, Make offer
KhanhhoaTours.com, Make offer
AirBucharest.com, Make offer
ChinaExpressAirlines.com, Make offer
EducationalPolicies.com, Make offer
Ex-ImBank.com, Make offer
ConnecticutMesothelioma.Com, Make offer
IdahoMesothelioma.Com, Make offer
KansasMesothelioma.Com, Make offer
MaineMesothelioma.Com, Make offer
NebraskaMesothelioma.Com, Make offer
VermontMesothelioma.Com, Make offer
WisconsinMesothelioma.Com, Make offer
AmericaMesothelioma.Com, Make offer
CanadaMesothelioma.Com, Make offer
BelarusMarketing.Com, Make offer
BulgariaMarketing.Com, Make offer
HungaryMarketing.Com, Make offer
LatviaMarketing.Com, Make offer
NetherlandsMarketing.Com, Make offer
SlovakiaMarketing.Com, Make offer
TaiwanMarketing.Com, Make offer
UkraineMarketing.Com, Make offer
SouthCarolinaMarketing.Com, Make offer
WestVirginiaMarketing.Com, Make offer
UkraineAutos.com , Make offer
All my domains had listed on godaddy, AfterNic and sedo, you can search and offer, Thank so much!
TravelRabat.Com , Make offer
AlgiersTravel.Com , Make offer
TravelLuanda.Com , Make offer
TravelPretoria.Com, Make offer
TravelIslamabad.Com, Make offer
TravelAnkara.Com, Make offer
BrazzavilleTravel.Com, Make offer
TravelPyongyang.Com, Make offer
1thethao.Com, Make offer
1BaoHiem.Com, Make offer
1CongNghe.Com, Make offer
1Thoitrang.Com, Make offer
1didong.com, Make offer
1thietke.com, Make offer
1Attraction.Com, Make offer
1chief.Com, Make offer
1cloth.Com, Make offer
1cream.Com, Make offer
1yoke.Com, Make offer
1fiction.Com, Make offer
VietnamShows.Com, Make offer
NormalDomain.Com, Make offer
HelpfulDomain.Com, Make offer
AustraliaScene.Com, Make offer
TopicDomain.Com, Make offer
ThailandScene.Com, Make offer
KhanhhoaTours.com, Make offer
AirBucharest.com, Make offer
ChinaExpressAirlines.com, Make offer
EducationalPolicies.com, Make offer
Ex-ImBank.com, Make offer
ConnecticutMesothelioma.Com, Make offer
IdahoMesothelioma.Com, Make offer
KansasMesothelioma.Com, Make offer
MaineMesothelioma.Com, Make offer
NebraskaMesothelioma.Com, Make offer
VermontMesothelioma.Com, Make offer
WisconsinMesothelioma.Com, Make offer
AmericaMesothelioma.Com, Make offer
CanadaMesothelioma.Com, Make offer
BelarusMarketing.Com, Make offer
BulgariaMarketing.Com, Make offer
HungaryMarketing.Com, Make offer
LatviaMarketing.Com, Make offer
NetherlandsMarketing.Com, Make offer
SlovakiaMarketing.Com, Make offer
TaiwanMarketing.Com, Make offer
UkraineMarketing.Com, Make offer
SouthCarolinaMarketing.Com, Make offer
WestVirginiaMarketing.Com, Make offer
UkraineAutos.com , Make offer
All my domains had listed on godaddy, AfterNic and sedo, you can search and offer, Thank so much!
Thứ Hai, 20 tháng 4, 2015
Lựa chọn ngôn ngữ nào để bắt đầu học lập trình?
Lập trình là một công việc cực kì trí tuệ và thú vị, song với số lượng ngôn ngữ lập trình quá nhiều như hiện nay, đâu là ngôn ngữ lập trình tốt nhất cho người mới bắt đầu? Hãy cùng trang công nghệ LifeHacker đi tìm câu trả lời cho câu hỏi hết sức phổ biến này.
programming
Thực tế, câu hỏi “Tôi nên học ngôn ngữ nào khi mới bắt đầu lập trình?” là một câu hỏi gây tranh cãi, ngay cả với những kỹ sư, giảng viên kì cựu nhất. Nếu bạn hỏi 10 lập trình viên “Đâu là ngôn ngữ tốt nhất cho ‘lính mới’?”, bạn hoàn toàn có thể nhận được 10 câu trả lời khác nhau.
Để tìm ra ngôn ngữ lập trình phù hợp nhất, bạn không chỉ cần đánh giá mức độ dễ học của mỗi ngôn ngữ, mà còn cần xem xét xem bạn sẽ lập trình trong các dự án như thế nào, yếu tố bạn ưa thích nhất ở lập trình là gì và liệu xem lập trình có trở thành nghề kiếm sống của bạn hay không.
Vì sao bạn muốn học lập trình?
Tùy vào lý do bạn muốn học lập trình, rất có thể câu trả lời đã được xác định sẵn cho bạn. Nếu bạn muốn thiết kế website hoặc ứng dụng nền web, bạn cần học HTML, CSS, Javascript để tạo ra các trang web hoàn chỉnh, và có lẽ là PHP để tạo ra hệ thống nền web hoàn chỉnh. Nếu bạn chủ yếu muốn phát triển ứng dụng di động hãy học Objective-C để lập trình cho iOS và học Java để lập trình cho Android.
Nếu bạn xác định rằng mình sẽ lập trình phục vụ cho nhiều mục đích, nhiều dự án, hoặc muốn thử nghiệm nhiều ngôn ngữ/công nghệ khác nhau, bạn cần phải học các khái niệm căn bản về lập trình một cách căn bản, và bắt đầu “học cách suy nghĩ như một lập trình viên đích thực”. Bằng cách tiếp cận này, bất kể là bạn bắt đầu học bằng ngôn ngữ nào đầu tiên, bạn có thể dễ dàng tiếp cận các ngôn ngữ mới trong tương lai.
Các ngôn ngữ được sử dụng nhiều nhất
Phần lớn các ngôn ngữ lập trình “chính thống” (được nhiều người sử dụng) như C, Java, C#, Perl, Ruby và Python đều có thể thực hiện các tác vụ giống nhau (hoặc gần giống nhau). Ví dụ Java là một ngôn ngữ lập trình hoạt động đa nền tảng (không phụ thuộc vào hệ điều hành, bất kể là Windows, Linux hay Mac), song các ứng dụng Python cũng có thể chạy trên Windows và Linux gần như tương đồng nhau. Bạn có thể dùng Java để viết các ứng dụng nền web lớn và Ruby cũng có khả năng này.
Do nhiều ngôn ngữ lập trình được xây dựng dựa trên các ngôn ngữ lập trình khác (ví dụ, Microsoft bị chỉ trích là đã “ăn cắp” từ Java để tạo ra C#), cấu trúc câu lệnh trên các ngôn ngữ này là gần như giống hệt nhau. Hãy thử xem ví dụ dưới đây về bài toán kinh điển “Hello World” (khi học một ngôn ngữ/công nghệ mới, điều đầu tiên mà bạn cần làm bao giờ cũng sẽ là tìm cách hiển thị dòng chữ “Hello World”):
Như bạn có thể thấy, cách viết của C# và Java gần như giống hệt nhau; trong khi cách viết của Python và Perl cũng không quá khác biệt.
Tuy vậy, giữa các ngôn ngữ có thể có sự khác biệt lớn về cách cài đặt, sử dụng… Tạp chí SOA World Magazine đưa ra lời khuyên như sau:
“Nếu bạn nhìn rất kĩ vào các ví dụ, bạn có thể thấy một vài ví dụ khá đơn giản, một số khác khá phức tạp, một số ngôn ngữ yêu cầu phải có dấu chấm phẩy (;) ở cuối câu lệnh, một số khác thì không. Nếu bạn mới bắt đầu lập trình, đôi khi bạn nên chọn các ngôn ngữ không có quá nhiều qui luật về cú pháp và logic, bởi nhờ đó mà ngôn ngữ này không thể “tự gây khó dễ cho chính mình”. Nếu bạn vừa thử một ngôn ngữ nào đó và cảm thấy không thoải mái, hãy đổi sang ngôn ngữ khác!”.
Sau đây là tổng quan về một số ngôn ngữ phổ biến nhất:
C: Viết ra các đoạn mã nguồn có hiệu năng cao
Có thể nói rằng C là ngôn ngữ lập trình được sử dụng nhiều nhất. Việc các lập trình viên cần biết sử dụng C giống như là các bác sĩ cần phải biết cấu tạo cơ thể con người vậy. C là một ngôn ngữ có bậc khá thấp (cách xa ngôn ngữ người, và gần với ngôn ngữ máy), do đó bạn sẽ học các nguyên tắc căn bản về cách tương tác với phần cứng. Bạn cũng sẽ học cách debug (theo dõi chương trình để phát hiện, sửa lỗi), quản lý bộ nhớ, và học cả cách hoạt động của phần cứng máy vi tính. Với các ngôn ngữ bậc cao hơn (như Java), bạn sẽ không có cơ hội học những kiến thức này, và bởi vậy học C là một cách chuẩn bị rất tốt để bước lên các ngôn ngữ khác. C được coi là “ông tổ” của các ngôn ngữ lập trình bậc cao như Java, JavaScript và C#.
Tuy vậy, do C là một ngôn ngữ khá “bài bản”, việc học lập trình với C sẽ khó khăn hơn các ngôn ngữ khác. Nếu bạn không cần viết các chương trình tương tác quá sâu với phần cứng (ví dụ như truy cập vào driver của thiết bị, hoặc viết các phần mở rộng cho hệ điều hành…), học C sẽ gây lãng phí thời gian – có thể là vô ích. Nói tóm lại, trong khi học C sẽ giúp bạn viết các chương trình tương tác sâu với hệ thống, bạn sẽ phải tốn rất, rất nhiều thời gian học trước khi có thể tạo ra một sản phẩm có ý nghĩa.
Java: Lựa chọn hợp lý, phù hợp với thực tiễn
Java là ngôn ngữ lập trình phổ biến thứ 2 trên thế giới. Java áp dụng gần như triệt để các nguyên tắc Lập trình Hướng đối tượng (OOP) – một mô hình được thực hiện trên hầu hết các ngôn ngữ hiện đại như C++, Perl, Python và PHP. Khi đã học Java, bạn sẽ dễ dàng nắm bắt được các ngôn ngữ OOP khác.
Java có thế mạnh là được sử dụng rất nhiều. Bạn có thể dễ dàng tìm được câu trả lời cho các bài toán căn bản trên Java, cộng đồng sử dụng Java cũng rất lớn (và do vậy khả năng được trợ giúp của bạn cũng sẽ lớn hơn), và ngôn ngữ Java được sử dụng cho rất nhiều mục đích (viết ứng dụng nền web, nền Windows, nền Android hoặc gần như là bất cứ hệ điều hành nào khác), do đó lựa chọn học Java là một lựa chọn khá khôn ngoan. Trong khi bạn không thể “chọc” sâu xuống hệ thống như C, Java vẫn cho phép bạn sử dụng các phần quan trọng như hệ thống tập tin, đồ họa, âm thanh, mạng… trên các hệ điều hành khác nhau.
Python: Dễ học và thú vị
Nhiều lập trình viên sẽ khuyên bạn học Python đầu tiên, bởi ngôn ngữ này khá đơn giản song lại có rất nhiều khả năng. Mã nguồn Python rất dễ đọc, và cũng đòi hỏi bạn phải làm theo các phong cách lập trình nên có (ví dụ như sắp xếp mã nguồn cho dễ đọc) trong khi lại không quá đòi hỏi gắt gao về cú pháp (ví dụ như phải thêm dấu chấm phẩy ở cuối câu lệnh).
Theo Patrick Jordan, chuyên gia tại Ariel Computing, so với thời gian cần thiết để viết các mã nguồn đơn giản trong các ngôn ngữ khác như C, Java và BASIC, Pythonn “đòi hỏi ít thời gian hơn, ít dòng code hơn, và đòi hỏi ít khái niệm cần phải học để đạt được một mục đích xác định hơn. Cuối cùng, lập trình với Python khá thú vị. Sự thú vị và khả năng thành công sẽ tạo ra sự tự tin và hứng thú cho học viên, và sau đó họ sẽ học lập trình dễ dàng hơn“.
SOA World cho rằng Python là một lựa chọn bắt buộc đối với những người muốn làm việc với Linux (hoặc đã quen với Linux từ trước). Nhờ được sử dụng trên các trang web nổi tiếng như Pinterest và Instagram, Python cũng đang ngày một phổ biến hơn.
JavaScript: Để lập trình web
Dù được đặt tên theo Java (vì lý do thương mại), JavaScript rất khác biệt so với Java. JavaScript có thể được coi là ngôn ngữ lập trình được hỗ trợ nhiều nhất, do tất cả các trình duyệt web đều hỗ trợ JavaScript. JavaScript được coi là 1 trong 3 thành phần căn bản của web: HTML chứa nội dung, CSS chứa giao diện và JavaScript đảm nhiệm vai trò tương tác động. JavaScript có cú pháp khá dễ sử dụng, bạn mất ít thời gian để viết và có thể dễ dàng đánh giá thành quả của mình khi lập trình JavaScript, và bạn cũng không cần tới quá nhiều công cụ pháp triển như các ngôn ngữ khác. Nói tóm lại, nếu bạn muốn tạo ra các trang web hấp dẫn, JavaScript là lựa chọn bắt buộc.
Lựa chọn đường đi cho mình
Nếu bạn muốn lựa chọn lập trình làm nghề nghiệp, hãy cân nhắc những lời khuyên sau đây từ Dev/Code/Hack:
- Lập trình Back-end/Server-side: Python, Ruby, PHP, Java hoặc .NET. Bạn cần phải có kiến thức về cơ sở dữ liệu và nên có kiến thức quản trị hệ thống.
- Lập trình Front-end/Client-side: HTML, CSS và Javascript. Bạn nên có khả năng thiết kế tốt.
[*] Thế nào là Front-end và Back-end? Ví dụ, khi bạn đọc bài trên VnReview, phần trang web được hiển thị trên trình duyệt của bạn được coi là front-end. Các xử lý mang tính hệ thống mà người dùng cuối không biết tới (ví dụ, lấy nội dung trang web từ cơ sở dữ liệu) sẽ được xử lý trong phần “back-end” của máy chủ.
- Lập trình di động: Objective-C cho iOS và Java cho Android. Bạn nên có kiến thức HTML/CSS để lập trình web cho thiết bị di động. Bạn cũng nên có kiến thức server-side.
- Lập trình 3D/lập trình game: C/C++, OpenGL. Bạn nên có thẩm mỹ tốt và tư duy sáng tạo.
- Lập trình cho các hệ thống đòi hỏi hiệu năng cao: C/C++ hoặc Java. Bạn nên có kỹ năng toán học và kỹ năng phân tích lượng tốt.
Nói tóm lại, học “code” là một con đường có rất nhiều xuất phát điểm. Điều quan trọng nhất là bạn phải biết mình cần gì: cần giải quyết vấn đề gì hoặc xây dựng ra các ứng dụng dạng nào. Blog Programming is terrible đưa ra kết luận:
“Ngôn ngữ đầu tiên mà bạn học được là ngôn ngữ khó nhất mà bạn sẽ học. Lựa chọn đường đi nhỏ bé hơn và dễ dàng hơn biến trải nghiệm này thành một chuyến phiêu lưu, hơn là một thử thách. Xuất phát điểm không quan trọng, miễn là bạn tiếp tục đi – tiếp tục viết code, tiếp tục đọc code. Cũng đừng quên test chúng. Một khi bạn đã lựa chọn được một ngôn ngữ thực sự giúp bạn vừa lòng, việc học các ngôn ngữ mới sẽ ít khó khăn hơn, và bạn sẽ tiếp tục thu về các kỹ năng mới“.
Theo VNReview
Chủ Nhật, 19 tháng 4, 2015
THUẬT TOÁN [ P_5 ]
1.5. THUẬT TOÁN ĐỆ QUY.
1.5.1. Khái niệm đệ quy:
Đôi khi chúng ta có thể quy việc giải bài toán với tập các dữ liệu đầu vào xác định về việc giải cùng bài toán đó nhưng với các giá trị đầu vào nhỏ hơn. Ch ẳng hạn, bài toán tìm UCLN c ủa hai số a, b với a > b có thể rút gọn về bài toán tìm ƯCLN của hai số nhỏ hơn, a mod b và b. Khi việc rút gọn như v ậy thực hiện được thì lời giải bài toán ban đầu có thể tìm được bằng một dãy các phép r út gọn cho tới những trường hợp mà ta có thể dễ dàng nhận được lời giải của bài toán. Ta sẽ thấy rằng các thuật toán rút gọn liên tiếp b ài toán ban đầu tới b ài toán có dữ liệu đầu vào nhỏ hơn, được áp dụng trong một lớp rất rộng các bài toán.
Định nghĩa: Một thuật toán được gọi là đệ quy nếu nó giải bài toán bằng cách rút gọn liên tiếp bài toán ban đầu tới bài toán cũng nh ư vậy nhưng có dữ liệu đầu vào nhỏ hơn.
Thí dụ 10: Tìm thuật toán đệ quy tính giá trị an với a là số thực khác không và n là số nguyên không âm.
Ta xây dựng thuật toán đệ quy nhờ định nghĩa đệ quy của an, đó là an+1=a.an với n>0 và khi n=0 thì a0=1. Vậy để tính an ta quy về các trường hợp có số mũ n nhỏ hơn, cho tới khi n=0.
Để tìm x trong dãy tìm kiếm a1,a2,...,an trong bước thứ i của thuật toán ta so sánhx với ai. Nếu x bằng ai thì i là vị trí cần tìm, ngược lại thì việc tìm kiế m được quy về dãy có số phần tử ít hơn, cụ thể là dãy ai+1,...,an. Thuật toán tìm kiếm có dạng thủ tục đệ quy như sau.
Cho search (i,j,x) là thủ tục t ìm số x trong dãy ai, ai+1,..., aj. Dữ liệu đầu vào là bộ ba (1,n,x). Thủ tục sẽ dừng khi số hạng đầu tiê n của dãy còn lại là x hoặc là khi dãy còn lại chỉ có một phần tử khác x. Nếu x không là số hạng đầu tiên và còn có các số hạng khác thì lại áp dụng thủ tục này, nhưng dãy tìm kiếm ít hơn một phần tử nhận được bằng cách xóa đi phần tử đầu tiên của dãy tìm kiếm ở bước vừa qua.
Giả sử ta muốn định vị x trong dãy a1, a2, ..., an bằng tìm ki ếm nhị phân. Trước tiên ta so sánh x với số hạng giữa a[(n+1)/2]. Nếu chúng bằng nhau thì thu ật toán kết thúc, nếu không ta chuyển sang tìm kiếm trong dãy ngắn hơn, nửa đầu của dãy nếu x nhỏ hơn giá trị giữa của của dãy xuất phát, nửa sau nếu ngược lại. Như vậy ta rút gọn việc giải bài toán tìm kiếm về việc giải cũng bài toán đó nhưng trong dãy tìm kiếm có độ dài lần lượt giảm đi một nửa.
Thí dụ 14. Thủ tục đệ quy sau đây cho ta giá trị của n! với n là số nguyên dương.
Bây giờ ta sẽ tính các phép toán cần dùng để tính fn khi s ử dụng phương pháp lặp. Thủ tục này khởi tạo x là f0 = 0 và y là f1= 1. Khi vòng lặp được duyệt qua tổng của x và y được gán cho biến phụ z. Sau đó x được gán giá trị của y và y được gán giá trị của z. Vậy sau khi đi qua vòng lặp lần 1, ta có x= f1 và y = f0 + f1 = f2. Khi qua vòng lặp lần n-1 thì x = fn-1. Như v ậy chỉ có n – 1 phép cộng được dùng để tìm fn khi n > 1.
1.5.1. Khái niệm đệ quy:
Đôi khi chúng ta có thể quy việc giải bài toán với tập các dữ liệu đầu vào xác định về việc giải cùng bài toán đó nhưng với các giá trị đầu vào nhỏ hơn. Ch ẳng hạn, bài toán tìm UCLN c ủa hai số a, b với a > b có thể rút gọn về bài toán tìm ƯCLN của hai số nhỏ hơn, a mod b và b. Khi việc rút gọn như v ậy thực hiện được thì lời giải bài toán ban đầu có thể tìm được bằng một dãy các phép r út gọn cho tới những trường hợp mà ta có thể dễ dàng nhận được lời giải của bài toán. Ta sẽ thấy rằng các thuật toán rút gọn liên tiếp b ài toán ban đầu tới b ài toán có dữ liệu đầu vào nhỏ hơn, được áp dụng trong một lớp rất rộng các bài toán.
Định nghĩa: Một thuật toán được gọi là đệ quy nếu nó giải bài toán bằng cách rút gọn liên tiếp bài toán ban đầu tới bài toán cũng nh ư vậy nhưng có dữ liệu đầu vào nhỏ hơn.
Thí dụ 10: Tìm thuật toán đệ quy tính giá trị an với a là số thực khác không và n là số nguyên không âm.
Ta xây dựng thuật toán đệ quy nhờ định nghĩa đệ quy của an, đó là an+1=a.an với n>0 và khi n=0 thì a0=1. Vậy để tính an ta quy về các trường hợp có số mũ n nhỏ hơn, cho tới khi n=0.
procedure power (a: số thực khác không; n: số nguyên không âm)Thí dụ 11: Tìm thuật toán đệ quy tính UCLN của hai số nguyên a,b không âm và a > b.
if n = 0 then power(a,n) := 1
else power(a,n) := a * power(a,n-1)
procedure UCLN (a,b: các số nguy ên không âm, a > b)Thí dụ 12: Hãy biểu diễn thuật toán tìm kiếm tuyến tính như một thủ tục đệ quy.
if b = 0 then UCLN (a,b) := a
else UCLN (a,b) := UCLN (a mod b, b)
Để tìm x trong dãy tìm kiếm a1,a2,...,an trong bước thứ i của thuật toán ta so sánhx với ai. Nếu x bằng ai thì i là vị trí cần tìm, ngược lại thì việc tìm kiế m được quy về dãy có số phần tử ít hơn, cụ thể là dãy ai+1,...,an. Thuật toán tìm kiếm có dạng thủ tục đệ quy như sau.
Cho search (i,j,x) là thủ tục t ìm số x trong dãy ai, ai+1,..., aj. Dữ liệu đầu vào là bộ ba (1,n,x). Thủ tục sẽ dừng khi số hạng đầu tiê n của dãy còn lại là x hoặc là khi dãy còn lại chỉ có một phần tử khác x. Nếu x không là số hạng đầu tiên và còn có các số hạng khác thì lại áp dụng thủ tục này, nhưng dãy tìm kiếm ít hơn một phần tử nhận được bằng cách xóa đi phần tử đầu tiên của dãy tìm kiếm ở bước vừa qua.
procedure search (i,j,x)Thí dụ 13: Hãy xây dựng phi ên b ản đệ quy của thuật toán tìm kiếm nhị phân.
if ai= x then loacation := i
else if i = j then loacation := 0
else search (i+1,j,x)
Giả sử ta muốn định vị x trong dãy a1, a2, ..., an bằng tìm ki ếm nhị phân. Trước tiên ta so sánh x với số hạng giữa a[(n+1)/2]. Nếu chúng bằng nhau thì thu ật toán kết thúc, nếu không ta chuyển sang tìm kiếm trong dãy ngắn hơn, nửa đầu của dãy nếu x nhỏ hơn giá trị giữa của của dãy xuất phát, nửa sau nếu ngược lại. Như vậy ta rút gọn việc giải bài toán tìm kiếm về việc giải cũng bài toán đó nhưng trong dãy tìm kiếm có độ dài lần lượt giảm đi một nửa.
procedure binary search (x,i,j)1.5.2. Đệ quy và lặp:
m := [(i+j)/2]
if x = am
then loacation := m
else if (x < am and i < m) then binary search (x,i,m-1)
else if (x > am and j > m) then binary search (x,m+1,j)
else loacation := 0
Thí dụ 14. Thủ tục đệ quy sau đây cho ta giá trị của n! với n là số nguyên dương.
procedure factorial (n: positive integer)Có cách khác tính hàm giai thừa của một số nguyên từ định nghĩa đệ quy của nó. Thay cho việc lần lượt rút gọn việc tính toán cho các giá trị nhỏ hơn, ta có thể xuất phát từ giá trị của hàm t ại 1và lần lượt áp dụng định nghĩa đệ quy để tìm giá trị của h àm tại các số nguyên lớn dần. Đó là thủ tục lặp.
if n = 1 then factorial(n) := 1
else factorial(n) := n * factorial(n-1)
procedure iterative factorial (n: positive integer)Thông thường để tính một dãy các giá trị đư ợc định nghĩa bằng đệ quy, nếu dùng phương pháp lặp thì số các phép tính sẽ ít hơn là dùng thuật toán đệ quy (trừ khi dùng các máy đệ quy chuyên dụng). Ta sẽ xem xét bài toán tính số hạng thứ n của dãy Fibonacci.
x := 1
for i := 1 to n
x := i * x
{x là n!}
procedure fibonacci (n: nguyên không âm)Theo thuật toán này, để tìm fn ta biểu diễn fn= fn-1+ fn-2. Sau đó thay thế cả hai số này bằng tổng của hai số Fibonacci bậc thấp hơn, cứ tiếp tục như vậy cho tới khi f0 và f1 xuất hiện thì được thay bằng các giá trị của chúng theo định nghĩa. Do đó để tính fn cần fn+1-1 phép cộng.
if n = 0 the fibonacci(n) := 0
else if n = 1 then fibonacci(n) := 1
else fibonacci(n) := fibonacci(n - 1) + fibonacci(n - 2)
Bây giờ ta sẽ tính các phép toán cần dùng để tính fn khi s ử dụng phương pháp lặp. Thủ tục này khởi tạo x là f0 = 0 và y là f1= 1. Khi vòng lặp được duyệt qua tổng của x và y được gán cho biến phụ z. Sau đó x được gán giá trị của y và y được gán giá trị của z. Vậy sau khi đi qua vòng lặp lần 1, ta có x= f1 và y = f0 + f1 = f2. Khi qua vòng lặp lần n-1 thì x = fn-1. Như v ậy chỉ có n – 1 phép cộng được dùng để tìm fn khi n > 1.
procedure Iterative fibonacci (n: nguyên không âm)Ta đã chỉ ra rằng số các phép toán dùng trong thuật toán đệ quy nhiều hơn khi dùng phương pháp lặp. Tuy nhiên đôi khi người ta vẫn thích dùng thủ tục đệ quy hơn ngay cả khi nó tỏ ra kém hiệu quả so với thủ tục lặp. Đặc biệt, có nh ững bài toán chỉ có thể giải bằng thủ tục đệ quy mà không th ể giải bằng thủ tục lặp.if n = 0 then y := 0{y là số Fibonacci thứ n}
else
beginx := 0 ; y := 1end
for i := 1 to n - 1
beginz := x + yend
x := y ; y := z
Chủ Nhật, 5 tháng 4, 2015
AUCTION.cpp [ OLP chuyên tin Năm 2010 ]
Tất cả chỉ là tham khảo thôi nhé.
# include<math.h>
# include<stdio.h>
# define vao"AUCTION.INP"
# define ra"AUCTION.OUT"
int main(){
FILE *f1,*f2;
long A,B,i,j;
int demso=0,dem,luu[6],kt,tam;
f1=fopen( vao ,"r");
fscanf(f1,"%d%d",&A,&B);
fclose(f1);
f2=fopen( ra ,"w");
for(i=A; i<=B; i++){
kt=1;
for(j=2; j<i; j++)
if(i%j==0){
kt=0;
break;
}
if(kt){
dem=0; tam=i;
while(tam>9){
luu[dem]=tam%10;
dem=dem+1;
tam=tam/10;
}
luu[dem] = tam;
for(j=0;j<=dem/2;j++)
if(luu[j]!=luu[dem-j]){
kt=0;
break;
}
}
if(kt) demso=demso+1;
}
fprintf(f2,"so luong: %d",demso);
fclose(f2);
return 0;
}
Đăng ký:
Bài đăng (Atom)
Bài đăng phổ biến
-
import java.io.*; public class ReadLine{ public static void main(String args[]){ InputStreamReader isr = new InputStreamReader...
-
import java.io.*; public class Test_Tng{ public static void main(String args[]){ InputStream is = System.in; ...
-
import java.io.*; public class Gptb2{ public static void main(String args[]){ InputStreamReader isr = new InputStream...
-
import java.io.*; public class Test_Ngto{ public static void main(String args[]){ InputStream is = System.in; ...
-
<%@ Page Language="VB" Debug="true" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespa...
-
<html> <head><script LANGUAGE="JavaScript"> function a_plus_b(form) { a=eval(form.a.value) ...
-
1. Hãy xây dựng lớp Diem cùng với các đối tượng điểm trong mặt phẳng và các phương thức sau: - Phương thức khởi tạo - Phương...
-
<html> <head> <title>Giai phuong trinh bac 2</title> <script language="JavaScript"> function giai(fo...
-
<%@ Page Language="VB" Debug="true" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespa...
-
<html> <head> <title>giai phuong trinh bac 1</title> <script language="JavaScript"> function giai(fo...